前言
最近开发中涉及到一个组件需要在多个项目中进行使用,为方便此组件的维护工作,决定将组件打包发布到npm上,并通过npm install 的方式进行使用,于是研究一下将组件打包发布与使用的流程。
此demo的github仓库地址:github.com/zhangyue44/…
组件A初始化
新建一个文件夹,为zy-testtt,npm init -y 生成一个package.json文件。由于本组件想使用webpack进行搭建,可直接修改package.json中的内容,具体内容如下所示。其中name值为要发布的npm包的名字,version为版本号,main为别的项目引用你的组件的入口(这里别忘记修改),repository为你的组件的仓库地址,keywords为关键词。
{ "name": "zy-testtt", "version": "1.9.8", "main": "build/zy.js", "repository": { "type": "git", "url": "test" }, "keywords": [ "vue", ], "dependencies": { "@babel/core": "^7.14.8", "babel-loader": "^8.2.2", "core-js": "^3.15.2", "regenerator-runtime": "^0.13.9", "vue": "^2.6.14" }, "devDependencies": { "webpack": "^5.24.4", "webpack-cli": "^4.5.0", "@babel/preset-env": "^7.14.8", "clean-webpack-plugin": "^4.0.0-alpha.0", "copy-webpack-plugin": "^9.0.1", "css-loader": "^6.2.0", "html-webpack-plugin": "^5.3.2", "less": "^4.1.1", "less-loader": "^10.0.1", "postcss": "^8.3.6", "postcss-cli": "^8.3.1", "postcss-loader": "^6.1.1", "postcss-preset-env": "^6.7.0", "style-loader": "^3.2.1", "vue-loader": "^15.9.6", "vue-template-compiler": "^2.6.14", "webpack-dev-server": "^3.11.2", "webpack-merge": "^5.8.0" } }
之后使用npm install安装相关依赖,安装完成之后添加webpack的相关配置,此demo没有添加webpack打包的相关优化配置,因为不是本文的重点,可自己进行添加。关键配置如下所示,output为打包输出路径,对于图片资源的处理,使用webpack5.x中新增的asset,此资源模块类型为webpack内置无需安装,可替代url-loader。
output: { path: resolveApp('./build'), filename: 'zy.js', library: "zy-testtt", // 给这个库起一个名字,指定的就是你使用require时的模块名 umdNamedDefine: true, // 会对 UMD 的构建过程中的 AMD 模块进行命名。否则就使用匿名的 define globalObject: "self" }, { test: /.(png|jpe?g|gif|svg)$/, type: "asset", generator: { filename: "img/[name].[hash:6][ext]" }, parser: { dataUrlCondition: { maxSize: 100 * 1024 } } },
框架搭建完成后,从入口文件开始往里塞自己的代码,记得在入口文件中一定要进行导出,在其它项目中才可以进行引入。
import helloWorlds from './helloWorld.vue' export default helloWorlds
npm发布
组件A开发完成后,使用npm run build进行打包,打包完成后就可以把包发布到npm上了。这里注意自己的组件name名一定不能和npm上别人已经发布的名字相同,而且name名称不能有大写字母,否则会发布失败。
首先在项目根目录终端输入npm login进行npm登录,这里注意不能使用taobao源或其它源,要使用npm源才可以。可以使用nrm更改源。登录成功后npm publish进行包发布,此时你的包已经发布完成了,可以登录npm官网进行查看。
这里再介绍一些其它命令:
删除发布的包: npm unpublish 让发布的包过期: npm deprecate 更新包: 需要手动修改package.json中的version版本号,更改完成后,分别执行打包、登录、发布
项目B引用组件A
现在可以在项目B中引入使用组件A了,例如我的组件A的名字为zy-testtt,可通过npm install zy-testtt安装组件A依赖,然后import sum from ‘zy-testtt’即可使用组件A,具体使用方式可以看我github上的代码。
<template>
<div id="app">
<sum :msg="'heng'"></sum>
</div>
</template>
<script>
import sum from 'zy-testtt'
</script>
组件的简单打包发布流程大致就这些,组件A中如果有图片与字体资源时,可能在组件B中无法展示,这个问题后面再进行探讨。
评论(0)