发布自己的Vue组件库到npm并实现通过命令行安装使用

我们在使用 Vue 进行日常开发时,我们经常会用到一些开源的 UI 库, 如:Element-UI, echarts 等,只需一行命令, 即可方便的将这些库引入我们当前的项目:

npm install  echarts  

或者 

yarn add echarts

但是当我们自己开发了一个UI Component, 需要在多个项目中使用的时候呢? 我们首先想到的可能是直接复制一份过去对吗?

这样做是很方便, 但是有两个问题:

当该 component 需要更新时, 我们需要手动维护所有用到该 component 的更新

当有多个 component 需要共享时, 手动复制过于繁琐

那么, 我们为什么不发布一个 UI 组件库给自己用呢?

但是我们怎么把组件发布出去呢?

答案是: npm 包管理器

作为一个前端,肯定都用过 npm 下载各种包,各种组件。但是你有没有发布过自己的组件或者包呢?

以下教你制作一个 Vue 组件,并发布到 npm上面,然后下载使用。

初始化 project


这里我们使用官方的 vue-cli 初始化一个 Vue 项目

npm install -g @vue/cli

或者

yarn global add @vue/cli

然后新建一个vue项目  

vue create my-personal-component

用vscode打开项目,下面我用vue3.0写了一个简单的页面展示

components文件夹下面新建一个MyComponent.vue文件,内容如下图

App.vue文件的内容如下

通过yarn serve命令启动项目,提示sass-loader没有安装

通过如下命令安装sass-loader(在安装sass-loader的过程有个坑,会一直报错,我查阅了很多资料,才发现安装7.0.3版本不会报错)

npm i -D sass-loader@7.0.3  

由于sass-loader是依赖于node-sass,所以必须安装node-sass,安装命令如下

npm install node-sass --save-dev

查看package.json (配置信息)

再次启动项目,运行成功


配置 project


下面我们来配置当前项目, 以使其可以发布到 npm 上.

首先我们编辑入口文件 src/components/index.js, 使其被作为 UI 库导入时能自动在Vue中注册我们的 Component:

接下来我们添加 build 项目的脚本到 package.json 的 scripts 中:

其中 --name libraryName 指定的是要发布的Library的名称 (运行 npm run build-bundle)

可以看到 build 生成了各种版本可以用于发布的js文件

这里我们选择默认发布我们的 *.common.js 文件, 所以我们在 package.json中添加main属性

指定该属性后, 当我们引用该组件库时, 会默认加载 main 中指定的文件

最后, 我们再配置 package.json中的 files属性, 来配置我们想要发布到 npm 上的文件路径.

我们这里将用户引用我们的组件库可能用到的所有文件都放进来:

在发布之前我们再编译一次, 让build出的文件为我们最新的修改:

npm run build-bundle

npm 发布


首先我们注册一个 npm 账号 (如果已有账号, 可以跳过此步骤)

没有的可以去官网注册 www.npmjs.com/

然后打开终端

使用 npm login 登录注册号的状态

输入你的用户名->密码->邮箱

(最好使用QQ邮箱注册,其他邮箱可能会有问题)

登录后可以使用 npm whoami 查看登录状态

登录成功如下图

通过cd 打开my-personal-component文件夹

接下来我们就可以使用下面的命令发布我们的 UI 组件库了

npm publish --access public

发布成功如下图

需要注意的是package.json中指定的version属性: 每次要更新我们的组件库都需要更新一下version(毕竟同一个version的代码不同,很容易让人产生疑惑)

这样子我们就发布好了我们第一个组件。

可以在 npm 点击我的 profile 查看。


注意:登录npm账号之后,可能会出现报错,如下图

解决方案是命令行输入 npm config set registry https://registry.npmjs.org/  后,再重新登录


注意:在发布之前, 我们修改一下项目的名称(注意不要和已有项目名称冲突), 推荐使用 @username/projectName 的命名方式.例如@jack/my-personal-component这种方式,但是我试过这种命名方式,发布的时候会提示如下报错

我上网查了很多资料,说是使用邮箱注册npm账号后没有点击邮件验证,后来我重新验证了邮箱(进入邮箱,点击链接即可)还是报错,最后通过把项目的名称改成下面这样的形式才可以正常发布

测试使用

这样我们就完成了自己的 UI 组件库的发布, 接下来我们可以在任何需要使用到该组件库的项目中使用

然后新建一个vue测试项目  

vue create test-vue

执行以下命令

npm install --save my-personal-component

在package.json中会显示安装的依赖

然后在index文件 (如src/main.js) 中引入该组件库:

import  'my-personal-component'

接下来我们就可以在 Vuetemplate中使用组件库中的 Component了:

重启项目,运行成功如下


最后

经过上面这些步骤后, 我们就拥有了一个属于自己的组件库了. 我们可以随时更新, 发布自己新版的组件库.

而依赖了该组件库的项目只需要使用简单的 npm 命令即可更新

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容