前言
模块化开发是提高开发效率的有效途径之一,最近抽时间研究了下vue打包,作为新手真的不容易,遇到一些坑,总结记录下。
正文
如标题所言,本文涉及的技术有三个:npm,vue,私服,其实还有一个:webpack,如果对以上技术都不熟悉的朋友也不要紧,本文作者也是一个新手,之前也都没接触到这些技术,也是通过这两天在网上找资料来了解这些技术,我会把我整理的链接贴出来供大家参考
npm:
npm 与 package.json 快速入门 - 前端 - 掘金
vue:
私服搭建:
私有Nuget服务搭建总结 - 简书
Nexus Repository Manager 3 搭建 npm 私服 - 知乎
webpack:
大家看完以上文档资料,对这些技术有了个基本的了解,下面就开始进入主题了
使用npm打包vue组件并发布到私服这件事可以拆分成两个任务:
任务一:使用npm打包vue组件
任务二:把打包好的vue组件发布到私服
一:使用npm打包vue组件(知道的同学直接跳过)
首先我们开发一个custom-switch组件,效果如下:
![](https://img.haomeiwen.com/i2023932/c9900785bbfc6ef8.gif)
创建custom-switch文件夹,切换到当前目录,使 vue init webpack-simple
命令创建一个新项目 custom-switch:
![](https://img.haomeiwen.com/i2023932/995905021ce054e7.png)
目录结构如下:
![](https://img.haomeiwen.com/i2023932/b86190b57c385f67.jpg)
在src同级目录创建一个packages目录,再在packages目录下创建switch目录,我们的组件代码就放到switch目录下面
在switch目录创建custom-switch.vue,index.js 两个文件
custom-switch.vue
<template>
<div>
<span class="weui-switch" :class="{'weui-switch-on' : me_checked}" :value="value" @click="toggle"></span>
</div>
</template>
<script>
export default {
name: "CustomSwitch",
props: {
value: {
type: Boolean,
default: true
}
},
data() {
return {
me_checked: this.value
}
},
watch: {
me_checked(val) {
this.$emit('input', val);
}
},
methods: {
toggle() {
this.me_checked = !this.me_checked;
}
}
}
</script>
<style>
.weui-switch {
display: block;
position: relative;
width: 52px;
height: 32px;
border: 1px solid #DFDFDF;
outline: 0;
border-radius: 16px;
box-sizing: border-box;
background-color: #DFDFDF;
transition: background-color 0.1s, border 0.1s;
cursor: pointer;
}
.weui-switch:before {
content: " ";
position: absolute;
top: 0;
left: 0;
width: 50px;
height: 30px;
border-radius: 15px;
background-color: #FDFDFD;
transition: transform 0.35s cubic-bezier(0.45, 1, 0.4, 1);
}
.weui-switch:after {
content: " ";
position: absolute;
top: 0;
left: 0;
width: 30px;
height: 30px;
border-radius: 15px;
background-color: #FFFFFF;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4);
transition: transform 0.35s cubic-bezier(0.4, 0.4, 0.25, 1.35);
}
.weui-switch-on {
border-color: #1AAD19;
background-color: #1AAD19;
}
.weui-switch-on:before {
border-color: #1AAD19;
background-color: #1AAD19;
}
.weui-switch-on:after {
transform: translateX(20px);
}
</style>
index.js
import CustomSwitch from './custom-switch'
/* istanbul ignore next */
CustomSwitch.install = function(Vue) {
Vue.component(CustomSwitch.name, CustomSwitch);
};
export default CustomSwitch;
再改下 webpack.config.js,方便打包和调试运行
var path = require('path')
var webpack = require('webpack')
const NODE_ENV = process.env.NODE_ENV
module.exports = {
// 修改打包入口
entry: NODE_ENV == 'development' ? './src/main.js' : './packages/switch/index.js',
output: {
path: path.resolve(__dirname, './dist'),
publicPath: '/dist/',
filename: 'custom-switch.js',
library: 'custom-switch', // 指定的就是你使用require时的模块名
libraryTarget: 'umd', // libraryTarget会生成不同umd的代码,可以只是commonjs标准的,也可以是指amd标准的,也可以只是通过script标签引入的
umdNamedDefine: true // 会对 UMD 的构建过程中的 AMD 模块进行命名。否则就使用匿名的 define
}
...
如果要执行 npm run dev 命令看效果的话,还需要修改 index.html,app.vue,main.js 代码我就不贴了,需要的同学 点击源代码下载地址
激动人心的时刻到了,切换到项目根目录运行 npm run build 看有没有生成dist目录,我这里是运行成功了
![](https://img.haomeiwen.com/i2023932/0b6b0e02abb6619c.png)
到此为止,我们的 任务一:使用npm打包vue组件的任务也就做完了
二:把打包好的vue组件发布到私服
参考上面 私服搭建 的文档,把私服搭建好了
把vue组件发布到私服可以分为以下几个步骤:
1.创建npm仓库
2.发布组件
创建npm仓库
设置-->Repository-->Repositories-->Create repository
![](https://img.haomeiwen.com/i2023932/3485390641075008.png)
仓库类型选择 npm(hosted)
![](https://img.haomeiwen.com/i2023932/e48063c71e9ead5b.png)
Name 随便起一个,点击Create Repository,创建完成,详情如下
![](https://img.haomeiwen.com/i2023932/6b89ade6f7ac7bb8.png)
接着要创建一个Roles
Security-->Roles-->Create role-->Nexus role
![](https://img.haomeiwen.com/i2023932/770db39b24f9a2c2.png)
打勾的需要填写,其他默认就可以,点击 Create role 就创建了一个对应此仓库的一个role
接着要把当前创建的 test-vue-role 关联一个用户上面(我这里选择已经创建好的用户)
Users-->点击已经创建好的用户-->双击test-vue-role-->Save
![](https://img.haomeiwen.com/i2023932/f7ba800af751e33b.png)
这样npm仓库就创建好了,等等,好像还有一个配置 (-_-)zz,不配置的话就会发布不成功,报以下错误
![](https://img.haomeiwen.com/i2023932/9f9400b893cd561f.jpg)
Realms-->添加 npm BearerToken Realm-->Save
![](https://img.haomeiwen.com/i2023932/9e2763609227527d.png)
好了,现在我们把做好的vue组件发布试试!
先登录私服:
npm login --registry=http://xxx.xxx.xxx:xxxx/repository/vue-test/
输入账号
输入密码
输入邮箱
![](https://img.haomeiwen.com/i2023932/1fe57192886ae1ef.png)
第一次需要登录,下次发布组件就需要登录了
发布组件,终于到了这一步骤...
npm publish --registry=http://xxx.xxx.xxx:xxxx/repository/vue-test/
很愉快的输入这一命令,
![](https://img.haomeiwen.com/i2023932/4d63703ea3cd21ab.png)
![](https://img.haomeiwen.com/i2023932/0932759b1afd0cf1.png)
看提示,貌似需要把 package.json 中 private 属性移除,试试再说
![](https://img.haomeiwen.com/i2023932/ae204f73b5ff6593.png)
哈哈,果然,发布成功了,上私服看看
![](https://img.haomeiwen.com/i2023932/b545f7346a57b91e.png)
OK,看到已经发布到自己的私服上面了
下面我们新建一个项目引用下这个组件,命令行输入以下指令
安装指定的组件
npm install custom-switch --registry=http://xxx.xxx.xxx:xxxx/repository/vue-test/
![](https://img.haomeiwen.com/i2023932/d1dd9f74e32a0d07.png)
可以看到已经成功的添加了
ps:命令后加上 --verbose 可以看下详细日志
总结:介绍了怎么开发一个vue组件,怎么创建一个npm私服,怎么发布组件,怎么引用组件,还是比较基础的,只是完成这件事,当然也留下了不少问题,比如:每次发布都需要跟上一个地址,好麻烦,这个我会研究解决这个问题,组件源码已上传到github,下载地址:https://github.com/maoruiily/custom-switch
大家在实际做的过程中如果有遇到什么问题,可以留言
ps:如果把组件上传到公网npm中心,可以参考:https://juejin.im/post/5b45df255188251b1d474860
网友评论