vue封裝組件,類似elementUI組件庫打包發布到npm上


封裝vue組件庫的兩種方法和形式:

一:是建立一個webpack-simple 項目

二:是在通過vue-cli腳手架建立webpack vue項目,這種項目有點冗余,可是我們對這種項目最熟悉

下面分別介紹兩種用法:

一:

1.首先先建立一個vue項目:

通過vue init webpack-simple,新建項目目錄如下:

箭頭指的是在項目打包后產生的文件(打包命令npm run build )

2.在src下新建一個目錄用來存放組件源碼:

然后寫封裝的組件,比如radios/radio.vue

3.組件封裝完后新建index.js文件,作為我們組件庫的出入口,index.js內容如下:

上圖中comment應該換成components,也就是你自己命名的變量名

4.完了之后修改package.json文件,修改如下:

  1.  
    {
  2.  
    "name": "hz-components-ui",
  3.  
    "description": "uicomponents",
  4.  
    "version": "0.0.0",
  5.  
    "author": "wyx",
  6.  
    "license": "MIT",
  7.  
    // 因為組件包是公用的,所以private為false
  8.  
    "private": false,
  9.  
    "scripts": {
  10.  
    "dev": "cross-env NODE_ENV=development webpack-dev-server --open --hot",
  11.  
    "build": "cross-env NODE_ENV=production webpack --progress --hide-modules"
  12.  
    },
  13.  
    // 配置main結點,如果不配置,我們在其他項目中就不用import XX from '包名'來引用了,只能以包名作為起點來指定相對的路徑
  14.  
    "main": "dist/hz-components-ui.min.js",
  15.  
    // 項目官網的url
  16.  
    "homepage": "https://wuyxgit.github.io/vueBuildTest/dist/index.html#/",
  17.  
    "bugs": {
  18.  
    "url": "https://github.com/hamger/hg-vcomponents/issues"
  19.  
    },
  20.  
    // 指定代碼所在的倉庫地址
  21.  
    "repository": {
  22.  
    "type": "git",
  23.  
    "url": "git+https://github.com/wuyxgit/vueBuildTest.git"
  24.  
    },
  25.  
    "dependencies": {
  26.  
    "vue": "^2.5.11"
  27.  
    },
  28.  
    // 指定關鍵字
  29.  
    "keywords": [
  30.  
    "hz",
  31.  
    "components"
  32.  
    ],
  33.  
    // 指定打包后發布到npm的文件名,沒指定則不傳,package.json是默認上傳的
  34.  
    "files": [
  35.  
    "dist",
  36.  
    "src/lib"
  37.  
    ],
  38.  
    "browserslist": [
  39.  
    "> 1%",
  40.  
    "last 2 versions",
  41.  
    "not ie <= 8"
  42.  
    ],
  43.  
    "devDependencies": {
  44.  
    "babel-core": "^6.26.0",
  45.  
    "babel-loader": "^7.1.2",
  46.  
    "babel-preset-env": "^1.6.0",
  47.  
    "babel-preset-stage-3": "^6.24.1",
  48.  
    "cross-env": "^5.0.5",
  49.  
    "css-loader": "^0.28.7",
  50.  
    "file-loader": "^1.1.4",
  51.  
    "vue-loader": "^13.0.5",
  52.  
    "vue-template-compiler": "^2.4.4",
  53.  
    "webpack": "^3.6.0",
  54.  
    "webpack-dev-server": "^2.9.1"
  55.  
    }
  56.  
    }
  57.  
     

5.修改webpack.comfig.js文件:

  1.  
    entry: "./src/lib/index.js",
  2.  
    output: {
  3.  
    path: path.resolve(__dirname, './dist'),
  4.  
    publicPath: '/dist/',
  5.  
    // filename: 'build.js'
  6.  
    filename: "hz-components-ui.min.js",
  7.  
    library: "hzComponentsUI",
  8.  
    libraryTarget: "umd",
  9.  
    umdNamedDefine: true
  10.  
    },

箭頭指的是修改的部分,紅圈內的是新增部分

6.打包通過npm run build 命令,打包完成后產生dist文件,內容如下:

7.現在本地找一個項目測試是否可用,先執行命令 npm pack ,會產生一個壓縮包

箭頭所指的tgz文件,然后在測試項目中,通過npm install 路徑\文件全名

路徑是指壓縮包所在的絕對路徑,文件名指的是壓縮包的全名

8.安裝后直接在測試項目的入口文件mian.js內引入,和引入elementUI一樣

import 名稱 from ‘組件庫名’

Vue.use(名稱);

然后在項目的任意組件中引用就行了,如果引入成功,則說明打包成功,接下來就是發布到npm上了

9.發布到npm上

回到組件庫項目的根目錄下:

1.npm login     登錄到npm上

2.npm version patch  這是把版本迭代一級,每次更新時都需要輸入這個命令,或者直接在package.json中修改版本號,只要與npm上的版本不同就行

3.npm publish  提交到npm上,至此就完成發布npm的全部了

項目訪問組件庫,就可以直接輸入 npm i/install 組件庫名稱來安裝,然后同上第八步就可以了

二:

1.首先通過vue init webpack 項目名 ,項目目錄如下:

2.封裝組件

在componetns文件下新建vue組件,放功能源碼,添加index.js,實現封裝后的組件的出入口

 

3.index.js添加內容如下:

  1.  
    import hzRadio from './radios/radio.vue'
  2.  
    import hzTimePicker from './timePickers/timePicker'
  3.  
     
  4.  
    const components = {
  5.  
    install(Vue){
  6.  
    Vue.component('hzRadio',hzRadio);
  7.  
    Vue.component('hzTimePicker',hzTimePicker);
  8.  
    }
  9.  
    };
  10.  
    // 這里的判斷很重要
  11.  
    if (typeof window !== 'undefined' && window.Vue) {
  12.  
    window.Vue.use(components);
  13.  
    }
  14.  
     
  15.  
    export default components;

 4.修改webpack.base.conf.js和webpack.prod.conf.js

webpack.base.conf.js

webpack.prod.conf.js

修改生產環境的出口

修改生產環境的樣式文件,打包后所有的樣式都會在這個文件下

把下面的這兩個注釋掉,不然npm run build 打包時會失敗,

這個可以注釋也可以不注釋,全部注釋的話打包后不會產生index.html文件

5.修改package.json文件,添加項目源碼地址,demo測試地址,以及一些配置:


6.修改后打包:

剩下的7,8,9三步同上第一種方法的7,8,9三步!!!

 

三:報錯

E401   --------   1.沒有權限,或者登陸出錯

                         2.或者是你要發布的包名已經被占用導致你沒有權限發布

                         3.或者2FA證書已失效,

      關於前兩個重新登錄,或者把包名更改,重新發布,第三個原因按照此方法 https://go.npm.me/2fa-guide  來做,我的做法是在手機下載一個Authenticator ,手機應用商店里搜一下,下載完后點擊添加Google或者其他賬戶來掃描二維碼,然后會產生驗證碼,驗證碼有效性為30秒

 

 

 

 

 

血淚史呀,為了發布和項目成功引用可以說到處都是坑,網上的都是二把手,沒有一個可以的,即使安裝它提供的組件庫也不能在main.js內引用,哎。。。。。。。。。揮淚整理!!!!!!!!!!

 

 

 

 

 

 

 


免責聲明!

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



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