本文部份内容参考如下连接:
blog.fundebug.com/2018/06/08/…css
npm install -g @vue/cli
# OR
yarn global add @vue/cli
复制代码
参考:cli.vuejs.org/zh/guide/in…html
定位到上级目录,建立 Vue-CLI 项目。新建或者覆盖均可以vue
vue create vue-cli
复制代码
Vue-CLI 在建立好项目后会自动进行安装,安装完毕的项目目录以下图node
components
文件夹设定打包 npm 包,输出的主题内容在 src/components
目录下git
在 components
文件夹下建立 component.vue
文件,在 components
文件夹下建立 parts
文件夹,parts
文件夹下建立子控件 part1.vue
、part2.vue
, 被 component.vue
引用。更新好内容的目录以下图:github
components
文件夹下的任何文件,均可以引用components
外的任何文件,对打包不会形成影响。vue-cli
先在 src/components
目录下建立 index.js
文件npm
import component from './component.vue';
component.install = Vue => Vue.component(component.name, component);
export default component;
复制代码
以上是输出单组件的写法,输出多组件的写法参考下列代码json
package.json
文件name 表示打包出来的项目的名字,未来这个库被别的项目引用,名字决定了它在 node_modules
下文件夹的名字。数组
若是你但愿打包出一个 npm 包库群下的一个组件,假设这个 npm 包库群的名字叫 @demo
, 这个包自己的名字叫 tester
, name 栏这么写:
@demo/tester
复制代码
其余项目引用后,node_modules
里就会长这样:
固然前缀什么都没有的话:
"name": "tester"
复制代码
其余项目引用后, node_modules
里就是光一个 tester
文件夹。
版本号,从 0.1.0
开始, 每次 publish 前升级下版本号。
项目描述
一个字符串数组,方便别人搜索到本模块
证书 说明对应的开源协议
如何选择证书,引用自 阮一峰 的文章
代码管理的地址
项目入口文件地址
"main": "./dist/component.common.js"
复制代码
component
这个名字和后面配置的 scripts
里面的命名有关
普通项目引用这个库,实际须要的文件,是在咱们打包输出的 dist
文件夹里的,可是这种输出文件放到 git 管理里又不智能,能够在 package.json
里添加这个 files
,
"files": [
"dist"
],
复制代码
能够达到既不在 git 代码管理里存储 dist
文件夹,普通项目又能引入所需文件的目的。
在 scripts 中添加打包指令:
"build-bundle": "vue-cli-service build --target lib --name component ./src/components/index.js"
复制代码
这样每次打包只须要执行
yarn build-bundle
复制代码
便可 (记得升级版本号)
"private": false,
复制代码
若是是公司内部的 npm 包,就不须要改了
项目中会有 dependencies
、devDependencies
、peerDependencies
具体区分参考 这篇文章
有助于减少包的大小
vue.config.js
文件module.exports = {
...
css: { extract: false }
...
}
复制代码
这样打包出来的文件会直接被内联到脚本文件里,不须要落地项目再引用一遍 css,来让样式配置生效
在项目目录里执行
yarn build-bundle
复制代码
进行打包
若是你要打包到外面的 npm 库 发布:npm publish --access public
实际发布的时候,我用的 name 是
@pimkle/tester
npm 未登陆注册等报错信息,在键入 npm publish 后,terminal 都会告诉你的,按照 terminal 的提示一步步进行操做便可。
上文提到了各个注意点,具体参考 demo 以下:
github.com/pimkle/npm-…
该 demo 项目未在实际项目引用测试过,有任何问题请留言或者发邮件和我联系 yeonkitt@gmail.com