步骤
以大数加法为例:
- 创建项目,安装 webpack, webpack-cli
mkdir npm_publish_bigInt
cd npm_publish_bigInt
npm init -y
cnpm i webpack -D
cnpm i webpack-cli -D
cnpm i terser-webpack-plugin -D
- 编写库的源码
// src/index.js
export default function add (a,b) {
let aLen = a.length - 1, bLen = b.length - 1
let count = 0 // 进位
let res = ''
while(aLen >= 0 || bLen >= 0) {
let aVal = 0, bVal = 0
if(aLen >= 0) { // 不能直接使用+a[aLen],防止其中一个先加完
aVal = +a[aLen]
aLen--
}
if(bLen >= 0) {
bVal = +b[bLen]
bLen--
}
let sum = aVal + bVal + count // 计算和
if(sum >= 10) {
count = 1
sum -= 10
}else {
count = 0
}
res = sum + res // '1'+2 = '12'
}
if(count) res = count + res
return res
}
- 编写配置文件 webpack.config.js
需要满足:
- 打包两个文件,一个代码压缩版min.js(用于生产环境),一个非压缩版(用于开发环境)
// 代码压缩使用插件:terser-webpack-plugin,类似uglify,打包js代码的
const TerserPlugin = require('terser-webpack-plugin'); // 引入插件
module.exports = {
entry: { // 打包文件的 多入口
'large-number': './src/index.js',
'large-number.min': './src/index.js'
},
output: { // 出口,文件名用入口组合
filename: '[name].js',
library: 'largeNumber', // 打包出来库的名称
libraryTarget: 'umd', // 可以用多种方法引用
libraryExport: 'default'
},
mode: 'none', // 去掉文件压缩
optimization: { // 配置
minimize: true,
minimizer: [
new TerserPlugin({ // 针对制定文件压缩
include: /\.min\.js$/, // 正则
})
]
}
}
- 编写根目录 index.js
区分生产环境和开发环境的引用
if (process.env.NODE_ENV === 'production') {
module.exports = require('./dist/large-number.min.js');
} else {
module.exports = require('./dist/large-number.js');
}
- npm登录
首先需要注册npm账号,并且登录 npm login
,留意自己的源
(可以安装 nrm 管理源)
npm i nrm -g
nrm ls
nrm use 源
登录需要邮箱验证
如登录成功,输入 npm whoami
可以查看到用户名
- 登录后,打包项目并发布
"scripts": {
"build": "webpack",
"prepublish": "webpack"
},
npm run build
npm publish
此时登录 npm(https://www.npmjs.com/) 即可看见 发布的包
使用
简单说一下使用
npm i npm_publish_bigint -D
在 node_modules/ npm_publish_bigint 中可以看到编写的一模一样的库代码
import bigInt from 'npm_publish_bigint'
bigInt('100','1')