使用CLI开发一个Vue3的npm库

简介: 使用CLI开发一个Vue3的npm库

前言


前几天写了一个Vue的自定义右键菜单的npm库,主要讲了插件的设计思路以及具体的实现过程,插件的开发流程没有细讲。


本文就跟大家分享下如何使用CLI从零开始开发一个支持Vue3的库,并上传至npm,欢迎各位感兴趣的开发者阅读本文。


实现思路


根据Vue官方文档中有关插件的介绍,我们开发的插件可以是公开install()方法的Object,也可以是工具类的function库。


本文我们要开发的库是需要向Vue添加一个自定义指令,属于向Vue添加全局级功能,所以需要采用公开install方法。


库开发完成后,就是需要打包上传至npm库了,打包这一块可以选择自己配webpack来搞,我选择用Vue Cli提供的方案来进行打包,接下来就跟大家分享下整体的思路:


  • 安装Vue CLI,本文安装的是4.x版本
  • 使用vue create [project-name]命令来创建一个项目,创建时选择自定义配置。
  • 删除默认创建的文件,配置依赖项
  • 配置打包命令
  • 配置CSS内联
  • 添加库描述
  • 发布至npm


实现过程


接下来带着大家动手操作下上述步骤。


安装Vue CLi


在终端执行下述命令:


yarn global add @vue/cli
# 或者
npm install -g @vue/cli


创建项目


在终端执行下述命令,本文要创建的项目名为:vue-right-click-menu-next


vue create vue-right-click-menu-next


在接下来的步骤中,由于Vue3底层大部分代码采用TypeScript编写,因此他可以完美的支持TS,我们创建项目时就要考虑到使用我们插件的用户启用TS的情况,因此我们要勾上TypeScript,此处我勾选的选项为:vue3, node-sass, eslint+prettier, typescript,可以按照自己的需要去选。


配置依赖项


项目创建好后,我们删掉CLI初始化时创建的东西,然后修改package.json中的内容。


在package.json中,CLI默认是把vuecore-js放在dependencies下的,我们开发的插件是要给其他开发者引用的,如果我们打包的产物中包含Vue包的话可能会引发各种问题,比如用户可能会在引入我们的包之后会在runtime时创建两个不用的Vue实例,所以vue插件的package.json里一定不能将其放在dependencies中,而是要放在peerDependencies中,表明会从引用者的其他的包中引入相对应的包,而不会在这个包里直接引入。


  • 在package.json中添加下述代码,移除原来dependencies下的依赖。


"peerDependencies": {
    "core-js": "^3.6.5",
    "vue": "^3.0.0"
  }


  • 在devDependencies中添加git提交规范相关依赖


{
    "@commitlint/cli": "^11.0.0",
    "@commitlint/config-angular": "^11.0.0",
    "commitizen": "^4.2.2",
    "cz-conventional-changelog": "^3.3.0",
    "husky": "^4.3.0",
}


  • 添加config和husky配置changelog生成地址和强制编辑器提交代码走我们定义的规范


{
  "config": {
    "commitizen": {
      "path": "./node_modules/cz-conventional-changelog"
    }
  },
  "husky": {
    "hooks": {
      "commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
    }
  }
}


  • 最后,在script中添加提交命令与生成changelog的命令


{
    "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s",
    "commit": "git-cz"
}


配置打包命令


由文档可知,可以通过vue-cli-service build --target lib --name myLib [entry]命令,将一个单独的入口构建为一个库。


那么,我们就可以在package.json的script标签里添加build命令用以执行插件的打包,代码如下。


  • vueRightMenuPlugin 打包后的文件名
  • src/main.ts 插件的入口文件


{
  "build": "vue-cli-service build --target lib --name vueRightMenuPlugin src/main.ts",
}


由于我们的插件启用了typescript,使用它的默认打包,不会帮我们生成ts声明文件,使用我们插件的开发者项目可能会启用typescript,在引用插件时就会报错声明文件不存在,因此我们需要额外做下述操作:


  • tsconfig.jsonz中添加下述代码,打包时在项目的指定位置自动生成配置文件。


{
    "declaration": true,// 是否生成声明文件
    "declarationDir": "dist/lib",// 声明文件打包的位置
}


  • 创建vue.config.js文件,关闭并行打包的一些相关配置。


module.exports = {
  chainWebpack: config => {
    if (process.env.NODE_ENV === "production") {
      config.module.rule("ts").uses.delete("cache-loader");
      config.module
        .rule("ts")
        .use("ts-loader")
        .loader("ts-loader")
        .tap(opts => {
          opts.transpileOnly = false;
          opts.happyPackMode = false;
          return opts;
        });
    }
  },
  parallel: false
};


做完上述操作后,我们运行打包命令时就能自动生成声明文件了。


配置CSS内联


当我把插件开发完,测试时发现我引用的组件样式丢了,找了好久问题,最后在CLI的文档中找到了问题所在,他有个css.extract属性,它使用来配置打包时是否将css样式提取到独立的文件中,Default: 生产环境下是 true,开发环境下是 false,我们打包时他默认是true,用户需要单独引入这个样式文件文件。


我们可以通过手动将其设置为false,让其在打包时使用内联样式,这样就能解决样式失效的问题了,我们在vue.config.js中加入下述代码。


module.exports = {
  // 强制css内联
  css: { extract: false }
}


添加库描述


做完上述操作,我们跟打包有关的相关的配置就弄好了,接下来我们在package.json中添加库的相关描述,让npm可以正确识别我们的插件。


  • name 插件名称
  • version 版本号
  • description 插件简述
  • private 是否私有
  • main 库的入口文件位置(打包后的入口文件)
  • types 库的声明文件位置
  • publisher 库发布者
  • repository 仓库信息
  • keywords 关键词,在npm找包时所匹配的关键词
  • author 库作者
  • license 库遵守的开源协议
  • bugs bug反馈地址
  • homepage 库主页


{
  "name": "vue-right-click-menu-next",
  "version": "1.0.0",
  "description": "支持vue3的右键菜单插件",
  "private": false,
  "main": "dist/vueRightMenuPlugin.common.js",
  "types": "dist/lib/main.d.ts",
  "publisher": "magicalprogrammer@qq.com",
  "repository": {
    "type": "git",
    "url": "git+https://github.com/likaia/vue-right-click-menu-next.git"
  },
  "keywords": [
    "vuejs",
    "vue3",
    "vue",
    "rightMenu",
    "右键菜单",
    "vueRightMenu"
  ],
  "author": "likaia",
  "license": "MIT",
  "bugs": {
    "url": "https://github.com/likaia/vue-right-click-menu-next/issues"
  },
  "homepage": "https://github.com/likaia/vue-right-click-menu-next#readme",
}


发布至npm


至此,我们插件的整个环境就搭建好了,可以着手与插件的实现了,对本文实现的插件感兴趣的开发者可移步至我的另一篇文章:使用vue封装右键菜单插件

插件开发完成后,我们就可以进行打包并发布至npm仓库了。


  • 打包
# 打包
yarn run build


  • 发布
npm publish --access public


插件发布成功:vue-right-click-menu-next


本文中开发的插件代码地址:vue-right-click-menu | vue-right-click-menu-next)


在线体验地址:chat-system


写在最后


  • 公众号无法外链,如果文中有链接,可点击下方阅读原文查看😊


相关文章
|
4月前
|
资源调度 JavaScript 索引
Vue2开发插件并发布到npm
这篇文章介绍了如何使用Vue 3、TypeScript和Vite开发一个下拉框组件`vue-amazing-selector`,并将其发布到npm,包括了项目的创建、组件开发、配置webpack、编写组件代码、导出组件、编译、npm包初始化、发布流程以及在项目中使用该插件的完整步骤。
Vue2开发插件并发布到npm
|
4月前
|
缓存 前端开发 Linux
哇塞!NPM 缓存竟成开发拦路虎?快来掌握清空秘籍,开启前端开发逆袭之旅!
【8月更文挑战第20天】NPM是前端开发中管理依赖的关键工具。有时需清空其缓存以解决版本不一致或包损坏等问题,确保使用最新依赖。可通过命令`npm cache clean --force`强制清空全部缓存,或手动删除各系统下的缓存文件夹。注意清空缓存可能延长后续安装时间,建议事先备份依赖或确保可重新安装。正确管理缓存有助于提升开发效率。
94 1
|
7月前
|
前端开发 JavaScript 数据安全/隐私保护
从0到1开发一个自己的npm包完整过程
创建自己的 npm 包涉及六个步骤:1) 注册 npm 账号;2) 使用 `npm init` 初始化项目,确保 package.json 的 name 唯一且 private 为 false;3) 开发项目,可封装 UI 组件、函数库或命令行工具;4) 本地调试,通过 `npm link` 在项目中测试;5) `npm login` 登录账号,可能需切换至官方仓库;6) 使用 `npm publish` 发布项目。注意版本号递增,无意义的包不建议发布。
538 2
从0到1开发一个自己的npm包完整过程
|
5月前
|
JavaScript 开发工具 数据安全/隐私保护
npm包【详解】(内含npm包的开发、发布、安装、更新、搜索、卸载、查看、版本号更新规则、package.json详解等)
npm包【详解】(内含npm包的开发、发布、安装、更新、搜索、卸载、查看、版本号更新规则、package.json详解等)
113 0
|
5月前
|
JavaScript 开发工具 git
使用TS+rollup打造一个npm工具库
使用TS+rollup打造一个npm工具库
189 0
|
缓存 JavaScript 前端开发
Vue3升级版本引发的 npm ERR! code ERESOLVE npm ERR! ERESOLVE unable to resolve dependency tree
Vue3升级版本,引发的 npm ERR! code ERESOLVE npm ERR! ERESOLVE unable to resolve dependency tree
736 0
Vue3升级版本引发的 npm ERR! code ERESOLVE npm ERR! ERESOLVE unable to resolve dependency tree
|
7月前
|
JavaScript iOS开发 MacOS
掌握NVM、NRM和NPM:Node.js开发的利器
掌握NVM、NRM和NPM:Node.js开发的利器
214 0
|
7月前
|
资源调度 JavaScript 开发工具
从npm慢如蜗牛到飞驰如光:nrm加速你的Node.js开发
从npm慢如蜗牛到飞驰如光:nrm加速你的Node.js开发
313 0
|
7月前
|
缓存 前端开发 开发工具
13个NPM快速开发技巧:提升前端开发效率
13个NPM快速开发技巧:提升前端开发效率
194 0
|
7月前
|
JavaScript 前端开发 Ruby
NPM 制作命令行工具 - 进阶辅助库
NPM 制作命令行工具 - 进阶辅助库
46 0
下一篇
无影云桌面