🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 一、使用模板 使用[现成模板项目](https://gitee.com/cainiao_web/npm-publish-test.git),替换其中组件,install相关依赖。 ![](https://img.kancloud.cn/bb/4c/bb4c0539f398ec58a13b9f059d2453e1_1114x647.png) ![](https://img.kancloud.cn/d1/4a/d14a0b4f8efd705bfc92ddc25b39ce26_230x118.png) # 二,重新搭建 ## 1、创建项目 ``` npm install -g @vue/cli 搭建工程 ``` ``` vue create llgtfoo-components-boxs 创建项目 ``` ## 2、在项目中添加组件库文件夹 在根目录下新建一个plugins文件夹,用来放组件,项目文件结构为: ![](https://img.kancloud.cn/5b/43/5b431ff52df69128f10c0b7ef48f0679_493x599.png) ## 3、修改vue.config.js文件 ``` const path = require('path') module.exports = { // 修改 pages 入口 pages: { index: { entry: 'src/main.js', // 入口 template: 'public/index.html', // 模板 filename: 'index.html' // 输出文件 } }, // 扩展 webpack 配置 chainWebpack: config => { // @ 默认指向 src 目录 // 新增一个 ~ 指向 plugins config.resolve.alias .set('~', path.resolve('plugins')) // 把 plugins 加入编译,因为新增的文件默认是不被 webpack 处理的 config.module .rule('js') .include.add(/plugins/).end() .use('babel') .loader('babel-loader') .tap(options => { // 修改它的选项... return options }) } } ``` ## 4、编写组件 ![](https://img.kancloud.cn/b6/0f/b60f20d4178275270f89de07530c1d83_484x115.png) 统一暴露组件、指令、过滤器: ``` import Demo from "./components/demo" import Transfer from "./components/transfer" const components = [Demo, Transfer]; //组件 // const directives = [] // 指令 // const filters = [ ] //过滤器 //定义install方法,Vue作为参数 const install = Vue => { console.log(Vue) //判断是否安装,安装过就不用继续执行 if (install.installed) return; install.installed = true; //遍历注册所有组件 components.map(component \=> Vue.component(component.name, component)); //遍历注册所有指令 // directives.map(directives => Vue.use(directives)); //遍历过滤器 // filters.map(filters => Vue.use(filters)); }; //检测到Vue再执行 if (typeof window !== "undefined" && window.Vue) { install(window.Vue); } export default { install, //所有组件,必须具有install方法才能使用Vue.use() ...components }; ``` ## 5、库模式打包 在package.json文件中的"scripts"字段里添加以下内容: ``` "scripts": { "serve": "vue-cli-service serve", "build": "vue-cli-service build", "lib": "vue-cli-service build --target lib --name llgtfoo-components-box -dest lib plugins/index.js", "lint": "vue-cli-service lint" }, ``` ## 6、.gitignore文件, 把包的一些测试文件过滤掉,最终打包只留下直接封装的文件,即plugins中封装的暴露组件 ``` .DS_Store node_modules /dist # local env files .env.local .env.*.local # Log files npm-debug.log* yarn-debug.log* yarn-error.log* pnpm-debug.log* # Editor directories and files .idea .vscode *.suo *.ntvs* *.njsproj *.sln *.sw? src/ plugins/ public/ vue.config.js babel.config.js *.map *.html ``` ## 7. 发布包 在终端执行,第一次发布: ``` npm login 登录npm官网 npm run lib 打包 npm publish 发布 ``` 更新版本: ``` npm version patch 修改版本号version npm publish 发布 ``` ``` patch:小变动,比如修复bug等,版本号变动 \*\*v1.0.0->v1.0.1\*\* minor:增加新功能,不影响现有功能,版本号变动 \*\*v1.0.0->v1.1.0\*\* major:破坏模块对向后的兼容性,版本号变动 \*\*v1.0.0->v2.0.0\*\* ``` 卸载包: ~~~bash npm unpublish <package-name> -f ~~~ ## 8、使用包 ``` npm i xxxxxxxx ``` ![](https://img.kancloud.cn/e5/ee/e5ee7f6949e8a202b307cddfc8351c5f_1576x870.png) ## 9、项目中实际使用 #### 9.1 安装依赖 ``` npm i npm-publish-test-jun123 ``` ![](https://img.kancloud.cn/c9/e0/c9e0ad903414b0d01b65613daecb4ab9_1135x858.png) #### 9.2 引入插件 ![](https://img.kancloud.cn/5f/f9/5ff9fdedff6656a5b26ffa9b1776d326_1381x770.png) #### 9.3 使用插件 ![](https://img.kancloud.cn/47/4b/474b20fe0e9b47107b833766a9d3c8bc_1163x732.png) #### 9.4 使用效果 ![](https://img.kancloud.cn/30/bc/30bc2dd496a61f303d8c635d5c10aa3f_1918x940.png)