使用vue在npm上發佈自己的ui組件包

使用vue在npm上發佈自己的ui組件包

可以提前去npm上搜自己要上傳的包名,以後在文件中都統一使用該包名,避免出錯。
npm官網

1.安裝

vue init webpack-simple jed-nui
jed-nui是我之前去npm搜過的包名,沒有重複的,於是項目就使用該名稱

2.進入項目,編寫組件

這裏有vue基礎的應該都不難

  • 創建文件目錄
├── src
│   ├── packages //存放組件包
│           ├── button
|                   ├── index.js   //配置文件
|                   ├── index.vue  //組件
│                   └── main.sass  //組件樣式表
|       ├── index.js  //統一配置

大體結構如此

  • 編寫組件

導出的時候要注意,要加上組件名稱(你以後在項目中要使用的名稱),比如像餓了麼ui中的el-button

export default {
name:"jed-button",
....
}
  • 在app.vue中引入,看是否出現對應的效果

3.相關配置

3.1 配置插件

在組件包中的index.js中進行插件配置

import JedButton from './index.vue';
JedButton.install = Vue => Vue.component(JedButton.name, JedButton);//.name就是開始說的vue文件暴露出來的name名,JedButton整個組件
if (typeof window !== 'undefined' && window.Vue) {
  window.Vue.use(JedButton);
}
export default JedButton;

我們都知道我們的包其實也就是一個插件,只有通過vue.use(插件名)才能使用。
具體參考 vue插件官方文檔

如果只有一個組件我們可以像上面那樣配置,但是如果組件太多了,我們可以建一個index.js進行統一配置
在packages根目錄下的index.js進行統一配置

import JedButton from./button/index.js”
import JedForm from "./form/index.js"
//引入全部js文件
const components=[JedButton,JedForm]
const install=function(Vue,opts={}){
components.forEach((elem,i)=>{
Vue.component(elem.name, elem);
})
}
export default install

ok到這基本要完事了

3.2配置webpack.config.js

var path = require('path')
var webpack = require('webpack')
const NODE_ENV = process.env.NODE_ENV;
module.exports = {
  // entry: './src/main.js',
  // output: {
  //   path: path.resolve(__dirname, './dist'),
  //   publicPath: '/dist/',
  //   filename: 'build.js'
  // },
  entry: NODE_ENV == 'development' ? './src/main.js' : './src/packages/index.js',
  output: {
    path: path.resolve(__dirname, './dist'),
    publicPath: '/dist/',//路徑
    filename: 'jed-nui.js',//打包之後的名稱
    library: 'jed-nui', // 指定的就是你使用require時的模塊名
    libraryTarget: 'umd', // 指定輸出格式
    umdNamedDefine: true // 會對 UMD 的構建過程中的 AMD 模塊進行命名。否則就使用匿名的 define
  },

這裏沒什麼要講的,主要是提醒打包後的文件名最好使用你npm發佈的包名。

3.3 配置package.json

{
  "name": "jed-nui",
  "description": "A Vue.js project",
  "version": "1.0.0",
  "author": "hansu123 <[email protected]>",
  "license": "MIT",
  "private": false,//設置成公開的
  "scripts": {
    "dev": "cross-env NODE_ENV=development webpack-dev-server --open --hot",
    "build": "cross-env NODE_ENV=production webpack --progress --hide-modules"
  },
  "dependencies": {
    "vue": "^2.5.11"
  },
  "browserslist": [
    "> 1%",
    "last 2 versions",
    "not ie <= 8"
  ],
  "devDependencies": {
    "babel-core": "^6.26.0",
    "babel-loader": "^7.1.2",
    "babel-preset-env": "^1.6.0",
    "babel-preset-stage-3": "^6.24.1",
    "cross-env": "^5.0.5",
    "css-loader": "^0.28.7",
    "file-loader": "^1.1.4",
    "node-sass": "^4.5.3",
    "sass-loader": "^6.0.6",
    "vue-loader": "^13.0.5",
    "vue-template-compiler": "^2.4.4",
    "webpack": "^3.6.0",
    "webpack-dev-server": "^2.9.1"
  },
  "keywords": [
    "jed-nui"
  ],//隨便設置不設置
  "main": "dist/jed-nui.js",
  //關鍵,這裏的路徑一定是你webpack.congfig.js中的filename,否則你在項目引入的時候會報錯,cant resolve
  //如果不設置的話,你在項目引入你發佈的包的時候需要import包的相對路徑,得自己找很麻煩
  "files":[
    "dist",
    "src"
  ]
  //打包後在包中存在的文件,這個你可以在安裝自己的包後在node_modules中查看
}

正常就改這些就ok了

修改.ignore

.DS_Store
node_modules/
npm-debug.log
yarn-error.log

# Editor directories and files
.idea
*.suo
*.ntvs*
*.njsproj
*.sln

4.本地測試

  • 打包
npm run build
npm pack

這樣會在項目生成一個tgz文件
在這裏插入圖片描述

  • 放入另一個vue項目中測試

npm i ./jed-nui-1.0.0.tgz

  • 引入

main.js中

import jedUI from "jed-nui"
Vue.use(jedUI)

在app.vue中使用

<jed-button type="danger">hansu</jed-button><br>
<jed-button type="warning">hansu</jed-button><br>
<jed-button type="danger" size="large">hansu</jed-button>

最終效果
jedUI

5.npm發佈

5.1 先去官網註冊一個賬號

npm官網

5.2 發佈
  • npm login
  • npm publish

不出意外你將會遇到如下錯誤:

  • 問題1

請不要使用cnpm

cnpm 的倉庫只是 npm 倉庫的一個拷貝,它不承擔 publish 工作,所以你用 cnpm publish 命令會執行失敗的。

切換原鏡像

npm config set registry=http://registry.npmjs.org

切換淘寶鏡像

npm config set registry=https://registry.npm.taobao.org/
  • 問題2
Unable to authenticate?

更新最新的npm

npm i -g npm
  • 問題3

郵箱驗證
會彈出點擊發送郵件即可

最後執行
npm publish
搞定

在這裏插入圖片描述

6.本地修改index.html

打包過後src路徑會發生變化,所以我們需要在index.html中修改src的路徑,不然頁面會什麼都沒有

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>jed-nui</title>
  </head>
  <body>
    <div id="app"></div>
    <script src="./dist/jed-nui.js"></script>
  </body>
</html>

更多詳細組件製作請參考餓了麼UI

餓了麼UI開源文檔

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章