vue4.0封裝插件,發布到npm上,npm install 形式引用


1、初始化一個項目 vue create ***

2、將項目中原來的src目錄改為examples

  新建packages空文件夾

3、因為沒了src目錄,需要修改vue.config.js(沒有這個文件就新建一個)才能正常運行

  直接上代碼

  
 1 const path = require('path');
 2 module.exports = {
 3     /* 部署生產環境和開發環境下的URL:可對當前環境進行區分,baseUrl 從 Vue CLI 3.3 起已棄用,要使用publicPath */
 4     // baseUrl: process.env.NODE_ENV === 'production' ? './' : '/',
 5     // publicPath: process.env.NODE_ENV === 'production' ? '/public/' : './',
 6     publicPath: './',
 7     //更改入口和出口文件名
 8     pages: {
 9         index: {
10             entry: "examples/main.js",
11             template: "public/index.html",
12             filename: "index.html"
13         },
14     },
15     // 擴展 webpack 配置,使 packages 加入編譯
16     chainWebpack: config => {
17         config.module
18             .rule('js')
19             .include
20             .add('/packages/')
21             .end()
22             .use('babel')
23             .loader('babel-loader')
24             .tap(options => {
25                 // 修改它的選項...
26                 return options
27             })
28     },
29     /* 輸出文件目錄:在npm run build時,生成文件的目錄名稱 */
30     outputDir: 'ecmoho-chart',
31     /* 放置生成的靜態資源 (mixin、css、img、fonts) 的 (相對於 outputDir 的) 目錄 */
32     assetsDir: "assets",
33     /* 是否在構建生產包時生成 sourceMap 文件,false將提高構建速度 */
34     productionSourceMap: false,
35     /* 默認情況下,生成的靜態資源在它們的文件名中包含了 hash 以便更好的控制緩存,你可以通過將這個選項設為 false 來關閉文件名哈希。(false的時候就是讓原來的文件名不改變) */
36     filenameHashing: false,
37     /* 代碼保存時進行eslint檢測 */
38     lintOnSave: false,
39     /* webpack-dev-server 相關配置 */
40     devServer: {
41         /* 自動打開瀏覽器 */
42         open: false,
43         /* 設置為0.0.0.0則所有的地址均能訪問 */
44         host: '0.0.0.0',
45         port: 8080,
46         https: false,
47         hotOnly: false,
48     }
49 };
vue.config.js

4、開始在packages中寫自己要封裝的插件

  1)packages下新建文件夾chart  --chart里面寫自己想要的插件

  2)packages下新建index.js文件

    
 1 import chart from "./chart/index";
 2 
 3 // 存儲組件列表
 4 const components = [chart];
 5 // 定義 install 方法,接收 Vue 作為參數。如果使用 use 注冊插件,則所有的組件都將被注冊
 6 const install = function(Vue) {
 7     // 判斷是否安裝
 8     if (install.installed) return;
 9     // 遍歷注冊全局組件
10     components.forEach(component => {
11         Vue.component(component.name, component)
12     });
13 };
14 // 判斷是否是直接引入文件
15 if (typeof window !== "undefined" && window.Vue) {
16     install(window.Vue);
17 }
18 export default {
19     // 導出的對象必須具有 install,才能被 Vue.use() 方法安裝
20     install,
21     // 以下是具體的組件列表
22     chart
23 };
packages/index

  3)chart文件夾下新建index.js文件

    
1 import chart from "./src/chart";
2 
3 // 為組件提供 install 安裝方法,供按需引入
4 chart.install = function (Vue) {
5     Vue.component(chart.name, chart)
6 };
7 // 默認導出組件
8 export default chart
packages/chart/index

  4)packages下面可以建自己需要的文件夾,例如css、js等

  完整packages文件夾文件目錄如下

 5、開始驗證了

  1)examples下main.js中引用

   2)app.vue組件中調用

   3)npm run serve 可以試運行一下,基本上不會出現什么差錯

6、發布到npm上

  1)修改package.json文件,添加一條npm run lib指令在scripts中,修改發布到npm上的各種字段

  直接上代碼

  
 1 {
 2   "name": "ecmoho-chart",
 3   "version": "0.1.1",
 4   "private": false,
 5   "description": "ecmoho-chart 圖形封裝插件",
 6   "main": "lib/ecmoho-chart.umd.min.js",
 7   "keyword": "vue echarts ecmoho-chart",
 8   "scripts": {
 9     "serve": "vue-cli-service serve",
10     "build": "vue-cli-service build",
11     "lib": "vue-cli-service build --target lib --name ecmoho-chart --dest lib packages/index.js"
12   },
13   "dependencies": {
14     "echarts": "^4.5.0",
15     "vue": "^2.6.10"
16   },
17   "devDependencies": {
18     "@vue/cli-service": "^4.1.0",
19     "vue-template-compiler": "^2.6.10"
20   },
21   "browserslist": [
22     "> 1%",
23     "last 2 versions"
24   ]
25 }
package.json

  2)添加.npmignore 文件,設置忽略發布文件

  代碼代碼

  
1 # 忽略目錄
2 examples/
3 packages/
4 public/
5 
6 # 忽略指定文件
7 vue.config.js
8 babel.config.js
9 *.map
.npmignore

  3)登錄npm賬號

    如果配置了淘寶鏡像,先設置回npm鏡像:$ npm config set registry http://registry.npmjs.org

    npm login  根據提示輸入賬號、密碼、郵箱就可以了,郵箱可以自己先登錄一下

    npm run lib 打包

    npm publish 發布

   4)如果報403錯誤說明郵箱沒有驗證,到npm官網上驗證一下郵箱就行了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM