• vue cli3开发自己的插件发布到npm


    具体流程如下:

    ·1、创建一个vue项目

    vue create project

      2、编写组件

    (1)新建一个plugins文件夹(可自行创建)

    (2)新建Button组件

    (3)组件挂载,为组件提供 install 方法,供组件对外按需引入

    3、本地测试

    1. //main.js中全局导入组件库
    2. import DangeUI from './plugins'
    3. Vue.use(DangeUI)
    4. // 页面使用
    5. <dan-button></dan-button>

    4、打包组件

    主要需要四个参数:

    1、target: 默认为构建应用,改为 lib 即可启用构建库模式

    2、name: 输出文件名

    3、dest: 输出目录,默认为 dist,这里我们改为 lib

    4、entry: 入口文件路径,默认为 src/App.vue,这里改为 src/plugin/index.js

    1. "scripts": {
    2. "serve": "vue-cli-service serve",
    3. "build": "vue-cli-service build",
    4. "lint": "vue-cli-service lint",
    5. "lib": "vue-cli-service build --target lib --name dange-ui --dest lib src/plugins/index.js"
    6. },


     执行 npm run lib 命令,编译组件

     

    5、准备发布

    首先需要在 package.json 添加组件信息

    name: 包名,该名不能和已有的名称冲突;

    version: 版本号,不能和历史版本号相同;

    description: 简介; main: 入口文件,应指向编译后的包文件;

    keyword:关键字,以空格分割;

    author:作者;

    private:是否私有,需要修改为 false 才能发布到 npm;

    license:开源协议。 

    1. "name": "dange-ui-component",
    2. "version": "0.1.0",
    3. "private": false,
    4. "description": "这是一个组件",
    5. "main": "lib/dange-ui.umd.min.js",
    6. "license": "MIT",
    7. "scripts": {
    8. "serve": "vue-cli-service serve",
    9. "build": "vue-cli-service build",
    10. "lint": "vue-cli-service lint",
    11. "lib": "vue-cli-service build --target lib --name dange-ui --dest lib src/plugins/index.js"
    12. }

    然后创建 .npmignore 文件,设置忽略文件

    该文件的语法和 .gitignore 的语法一样,设置发布到 npm 时忽略哪些目录或文件

    1. .DS_Store
    2. node_modules/
    3. examples/
    4. packages/
    5. public/
    6. vue.config.js
    7. babel.config.js
    8. *.map
    9. *.html
    10. # local env files
    11. .env.local
    12. .env.*.local
    13. # Log files
    14. npm-debug.log*
    15. yarn-debug.log*
    16. yarn-error.log*
    17. # Editor directories and files
    18. .idea
    19. .vscode
    20. *.suo
    21. *.ntvs*
    22. *.njsproj
    23. *.sln
    24. *.sw*

    6、发布到npm(以下是我们内部npm)

    登录账号:npm login --registry http://npm.taos.qdcares

    输入用户名,密码,邮箱

    发布包:npm publish

    常用命令 

    修改npm的配置文件

    npm config set @cares:registry http://npm.tao.qdcares

    删除指定npm地址的包

    npm unpublish guitest --force --registry=http://npm.tao.qdcares

    查看当前操作用户

    npm whoami

     

    发布成功后,可以去npm 查看自己发布的包

    7、使用组件

    npm i dange-ui-component

    在main.js中全局注册

    1. import Vue from 'vue'
    2. import App from './App.vue'
    3. import DangeUI from 'dange-ui-component'
    4. import 'dange-ui-component/lib/dange-ui.css'
    5. Vue.use(DangeUI)
    6. Vue.config.productionTip = false
    7. new Vue({
    8. render: h => h(App),
    9. }).$mount('#app')

    页面中直接使用  

    <dan-button></dan-button>

    注意:,这个标签与组件文件中的button.vue里的name保持一致 

    8、常见问题

    问题1: 401 Unauthorized - PUT https://registry.npmjs.org/vue-dialog-service --You must be logged in to publish packages

    解决方法:执行登录npm login

    问题2: 403 Forbidden - PUT https://registry.npmjs.org/vue-dialog-service - You do not have permission to publish “vue-dialog-service”. Are you logged in as the correct user?

    解决方法:这是因为npm上有存在和你相同的name,需要修改package.js中的name

    问题3:403 Forbidden - PUT https://registry.npmjs.org/vdialogservice - you must verify your email before publishing a new package: https://www.npmjs.com/email-edit

    解决方法:需要邮件激活,可以登录npm去激活一次 

    问题4:403 Forbidden - PUT https://registry.npmjs.org/vdialogservice - You cannot publish over the previously published versions: 0.1.0.

    解决方法:需要重新发布,每次发布package.js中的version要增加一下。

    问题5:如图

    插件中的所有依赖文件都无法使用

    解决方法:webpack中把依赖包打包成单独的js文件导致的,将一下代码注释掉就解决了

    将每个依赖包打包成单独的js文件

    1. config.optimization = {
    2. runtimeChunk: "single",
    3. splitChunks: {
    4. chunks: "all",
    5. maxInitialRequests: Infinity,
    6. minSize: 30000, // 依赖包超过20000bit将被单独打包
    7. cacheGroups: {
    8. vendor: {
    9. test: /[\\/]node_modules[\\/]/,
    10. name(module) {
    11. const packageName = module.context.match(
    12. /[\\/]node_modules[\\/](.*?)([\\/]|$)/
    13. )[1];
    14. return `npm.${packageName.replace("@", "")}`;
    15. }
    16. }
    17. }
    18. }
    19. };


  • 相关阅读:
    在linux上搭建DHCP和DNS
    【API 管理】什么是 API 管理,为什么它很重要?
    新能源汽车如何融合互联网,结合消费者习惯打造全新的营销策略?
    Leetcode899 有序队列Orderly Queue
    IBM Spectrum LSF Explorer 为要求苛刻的分布式和任务关键型高性能技术计算环境提供强大的工作负载管理
    倍福TwinCAT3--基于C++实现ADS通讯
    Linux 系统服务日志查询 journalctl:查询 systemd 日记
    信息系统项目管理师Part9-可靠性和可用性
    如何理解UML2.5.1(02篇)
    C++学习第十课--构造函数详解、explicit与初始化列表笔记
  • 原文地址:https://blog.csdn.net/chensi_07/article/details/138165344