前言
最近开发中涉及到一个组件需要在多个项目中进行使用,为方便此组件的维护工作,决定将组件打包发布到npm上,并通过npm install 的方式进行使用,于是研究一下将组件打包发布与使用的流程。
此demo的github仓库地址:https://github.com/zhangyue44/webpack-npm-
组件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中无法展示,这个问题后面再进行讨论。