如何发布自己的npm包(vue组件)

简介: 如何发布自己的npm包(vue组件)




![请添加图片描述](https://ucc.alicdn.com/images/user-upload-01/dc767cbf5a30483eba0bed413c7da197.png)



如何在`NPM`上发布自己的第一个`vue`组件库,是每一名`vue`[前端开发](https://so.csdn.net/so/search?q=前端开发&spm=1001.2101.3001.7020)人员必经的进阶之路,本文将结合作者的实践项目,为各位读者详细讲解所有的操作步骤,相信你在阅读本文后,就能立马动手。


由于本文的主要目的是讲解如何创建组件库并发布到`NPM`,因此对于组件的创建会一笔带过。


## 1.创建项目


打开`cmd`在项目中输入一下命令初始化一个`vue`的项目,名称自定义


```

vue create app

```



在src的同级目录下新建一个名称为`myComponents`的组件库,如图所示

![请添加图片描述](https://ucc.alicdn.com/images/user-upload-01/c9b448ae090944cfaead4316b44ac787.png)






## 2.配置自己的项目


`myComponents`是新增的一个目录,默认不被`webpack`处理,所以需要在`vue.config.js`里面配置组件库,以便`webpack`编译,没有`vue.config.js`的话,就在目录下新建一个。并在`vue.config.js`填入一下内容


```js

module.exports = defineConfig({

 transpileDependencies: true,

 configureWebpack: {

   devtool: 'source-map'

},

// 强制内联CSS

css: {

   extract: false

},

// 扩展 webpack 配置,使 components 加入编译

chainWebpack: config => {

   config.module

       .rule('js')

       .include

       .add('/myComponents')//这里根据你文件夹名称自定义,每个人不一样

       .end()

       .use('babel')

       .loader('babel-loader')

       .tap(options => {

           // 修改它的选项...

           return options

       })

}


})


```


## 3.编辑自定义组件库


![请添加图片描述](https://ucc.alicdn.com/images/user-upload-01/7c635f7755184d1782fc60a0d737cba0.png)



1. 在`myComponents`文件加下新建一个`tinyMce`文件夹(此文件夹即是你对组件的命名),同时,在此文件夹下新建一个`src`目录,`src`下创建的`.vue`文件最好保证与文件夹`tinyMce`命名一致。

2. 分别在`myComponents`文件夹和`tinyMce`文件夹下新建`index.js`文件,这是他们的入口文件,注意路径如上图所示,不要弄错了。

3. 要将所有的静态资源文件等等放入`myComponents`文件夹下,比如我就放在了assets目录下,因为外部的其他文件是不会被打包上传的。


以`tinyMce/src/tinymce.vue`为例子,你们可以依照自己的组件名称进行对应的修改,代码如下:


```js

import tinymce from './src/tinymce'


// 为组件提供 install 安装方法,供按需引入

tinymce.install = Vue => {

   Vue.component(tinymce.name, tinymce)

}


// 默认导出组件

export default tinymce


```


编写`myComponents/index.js`文件,对组件库进行导出。


```js

import tinymce from './tinyMce/index'

const components = [

   tinymce

]

// 定义 install 方法,接收 Vue 作为参数。如果使用 use 注册插件,则所有的组件都将被注册

const install = Vue => {

   // 判断是否可以安装

   if (install.installed) return

       // 遍历注册全局组件

   components.map(component => Vue.component(component.name, component))

}

// 判断是否是直接引入文件

if (typeof window !== 'undefined' && window.Vue) {

   install(window.Vue)

}

export default {

   // 导出的对象必须具有 install,才能被 Vue.use() 方法安装

   install,

   // 以下是具体的组件列表

   tinymce

}


```


## 4.进行本地测试能否正常使用


![请添加图片描述](https://ucc.alicdn.com/images/user-upload-01/bbcf2b50dc4b4676a0bba7d6714b7e17.png)




如图在本地的`src`(注意不是`tinyMce`下的)下的`main.js`导入组件并使用,并在`APP.vue`里面直接使用自己的组件。![请添加图片描述](https://ucc.alicdn.com/images/user-upload-01/096533158e604edaa792c39e925455f1.png)


并使用`npm run serve`运行查看能否运行成功


![请添加图片描述](https://ucc.alicdn.com/images/user-upload-01/bbe17f78b7ea40efaec52271d3878e13.png)


我成功了,接下来就可以来发布自己的npm包了


## 5.配置发布


在package.json的sript命令中新增一条编译组件库的命令


```js

"lib": "vue-cli-service build --target lib --name landscape-components --dest lib myComponents/index.js"


```


执行编译命令 ---   npm run lib


![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/20191124122739154.png)


编译成功后,会得到一个lib文件夹如图所示


![请添加图片描述](https://ucc.alicdn.com/images/user-upload-01/bdedc0c73730419a97bcc5386f2d3008.png)



### 5.1配置package.json文件


参考如下


```json

 "name": "chdemo_tinymce",//组件名称

 "version": "0.1.1",//版本号

 "private": false,//原来为true,要改成false,否则发布不出去

 "description": "tinymce富文本编辑器的插入文本图片等接口集成", //包的描述

 "main": "lib/landscape-components.umd.min.js", //入口文件

 "keywords": ["tinymce"],//关键词

 "author": { "name": "ymktchic" }, //作者

```


## 5.2添加.npmignore文件


这一步比较重要,旨在发布`npm`包的时候忽略不必要的文件上传,需要编译上传的只有lib文件夹,`package.json`,`README.md`这三个,其他的都可以忽略。


可以按照我的配置,配置如下


```.npmignore

# 忽略目录

src

myComponents

node_modules

public

utils

# 忽略指定文件

vue.config.js

babel.config.js

*.map

jsconfig.json

```


## 6.发布自己的npm包


先在 npm 官网([https://www.npmjs.com/](https://www.npmjs.com/))上注册一个账号,注册过程略。此处注意注册完需要2FA六位动态码绑定,动态码每隔半分钟更新一次,此动态码用于发布,可以在个人Account里面去根据流程操作进行绑定。

![请添加图片描述](https://ucc.alicdn.com/images/user-upload-01/609b9b4a6e9f4decbc625a56a9ee867b.png)



### 登录


注册成功后,在输入npm login,一下要依次输入你的用户名,密码,邮箱和六位动态码


```

npm login

```


![请添加图片描述](https://ucc.alicdn.com/images/user-upload-01/be0d3144a5624bbf8e69b7b2f8e71ceb.png)



如果提示上图信息,便表示登录成功,接下来使用如下命令发布


如果没发布成功,可以尝试把原来使用淘宝镜像源的更换成官方源,因为淘宝是只读源


```

npm config set registry https://registry.npmjs.org

```




```

npm publish

```


如果提示输入--ocp的话,就再一次输入自己的六位动态码即可。


如果收到了npm发来的邮箱,便表示你发布成功啦。


![请添加图片描述](https://ucc.alicdn.com/images/user-upload-01/27eab7f51a0148719ec7c562c835cc4a.png)



## 下载使用


1. 使用vue create app

新建一个项目  ,然后在项目下输入以下命令


```

npm install chdemo_tinymce//我的包是chdemo_tinymce,你们的是什么就填什么即可

```


如果安装不成功,依然是要换成官方镜像源,使用如下命令


```

npm config set registry https://registry.npmjs.org

```


如图,同样是在main.js中引入自己的文件

![请添加图片描述](https://ucc.alicdn.com/images/user-upload-01/b79d49f6ada84cde8a7b9bea4dc5b712.png)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hyeIPyLn-1656645076866)


然后在APP.vue里面自己使用,无需注册。


![请添加图片描述](https://ucc.alicdn.com/images/user-upload-01/081e3332200f4eabb4533ecb92547020.png)

![请添加图片描述](https://ucc.alicdn.com/images/user-upload-01/3c10c200e8dd4ad38d51224a9a1824d4.png)


这样就大功告成啦!


感谢阅读,记录自己的踩坑经验,总结,希望帮到各位。

[腾讯云服务器,65](https://curl.qcloud.com/rx0xGUk2)

<a href="https://curl.qcloud.com/rx0xGUk2">![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/39f46db3782946d686c65c86996710c9.jpeg#pic_center)

</a>

目录
相关文章
|
3月前
|
人工智能 JavaScript 算法
Vue 中 key 属性的深入解析:改变 key 导致组件销毁与重建
Vue 中 key 属性的深入解析:改变 key 导致组件销毁与重建
500 0
|
3月前
|
JavaScript UED
用组件懒加载优化Vue应用性能
用组件懒加载优化Vue应用性能
|
5月前
|
JavaScript
vue实现任务周期cron表达式选择组件
vue实现任务周期cron表达式选择组件
693 4
|
3月前
|
JavaScript 前端开发 UED
Vue 表情包输入组件的实现代码:支持自定义表情库、快捷键发送和输入框联动的聊天表情解决方案
本文详细介绍了在 Vue 项目中实现一个功能完善、交互友好的表情包输入组件的方法,并提供了具体的应用实例。组件设计包含表情分类展示、响应式布局、与输入框的交互及样式定制等功能。通过核心技术实现,如将表情插入输入框光标位置和点击外部关闭选择器,确保用户体验流畅。同时探讨了性能优化策略,如懒加载和虚拟滚动,以及扩展性方案,如自定义主题和国际化支持。最终,展示了如何在聊天界面中集成该组件,为用户提供丰富的表情输入体验。
291 8
|
3月前
|
JavaScript 前端开发 UED
Vue 表情包输入组件实现代码及详细开发流程解析
这是一篇关于 Vue 表情包输入组件的使用方法与封装指南的文章。通过安装依赖、全局注册和局部使用,可以快速集成表情包功能到 Vue 项目中。文章还详细介绍了组件的封装实现、高级配置(如自定义表情列表、主题定制、动画效果和懒加载)以及完整集成示例。开发者可根据需求扩展功能,例如 GIF 搜索或自定义表情上传,提升用户体验。资源链接提供进一步学习材料。
188 1
|
3月前
|
JavaScript 前端开发 UED
Vue 项目中如何自定义实用的进度条组件
本文介绍了如何使用Vue.js创建一个灵活多样的自定义进度条组件。该组件可接受进度段数据数组作为输入,动态渲染进度段,支持动画效果和内容展示。当进度超出总长时,超出部分将以红色填充。文章详细描述了组件的设计目标、实现步骤(包括props定义、宽度计算、模板渲染、动画处理及超出部分的显示),并提供了使用示例。通过此组件,开发者可根据项目需求灵活展示进度情况,优化用户体验。资源地址:[https://pan.quark.cn/s/35324205c62b](https://pan.quark.cn/s/35324205c62b)。
113 0
|
5月前
|
存储 JavaScript 前端开发
基于 ant-design-vue 和 Vue 3 封装的功能强大的表格组件
VTable 是一个基于 ant-design-vue 和 Vue 3 的多功能表格组件,支持列自定义、排序、本地化存储、行选择等功能。它继承了 Ant-Design-Vue Table 的所有特性并加以扩展,提供开箱即用的高性能体验。示例包括基础表格、可选择表格和自定义列渲染等。
373 6
|
5月前
|
存储 JavaScript 前端开发
在NodeJS中使用npm包进行JS代码的混淆加密
总的来说,使用“javascript-obfuscator”包可以帮助我们在Node.js中轻松地混淆JavaScript代码。通过合理的配置,我们可以使混淆后的代码更难以理解,从而提高代码的保密性。
412 9
|
6月前
|
移动开发 JavaScript 前端开发
vue中npm打包遇到× eslint —fix found some errors. Please fix them and try committing again.husky > pre-commit hook failed (add —no-verify to bypass)报错解决方案-卓伊凡
vue中npm打包遇到× eslint —fix found some errors. Please fix them and try committing again.husky > pre-commit hook failed (add —no-verify to bypass)报错解决方案-卓伊凡
215 7
vue中npm打包遇到× eslint —fix found some errors. Please fix them and try committing again.husky > pre-commit hook failed (add —no-verify to bypass)报错解决方案-卓伊凡
|
10月前
|
前端开发 JavaScript 测试技术
Vue3中v-model在处理自定义组件双向数据绑定时,如何避免循环引用?
Web 组件化是一种有效的开发方法,可以提高项目的质量、效率和可维护性。在实际项目中,要结合项目的具体情况,合理应用 Web 组件化的理念和技术,实现项目的成功实施和交付。通过不断地探索和实践,将 Web 组件化的优势充分发挥出来,为前端开发领域的发展做出贡献。
236 64