如何开发npm包
举一个简单的场景,启动不同的前端项目可能需要的命令都不一样
1 |
|
main
字段表示当前脚本工具的入口文件bin
字段表示 启动命令 我们的工具可以使用 npx dev 启动,另外bin内的命令会被安装到 node_modules/bin目录下,如果是全局安装则会是全局依赖node_modules/bin目录下
入口文件
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31const fes = require('fs-extra')
const path = require('path')
const execa = require('execa')
const baseDir = process.cwd()
// 预定义好启动命令
const devCommands = ['dev', 'start:dev', 'start']
const execLog = (command, args, options = {}) => {
const promise = execa(command, args, {
stdio: 'inherit',
...options,
});
// promise.stdout.pipe(process.stdout);
// promise.stderr.pipe(process.stderr);
return promise;
};
module.exports = async() => {
const packageJsonPath = path.resolve(baseDir, 'package.json')
if (!fes.pathExistsSync(packageJsonPath)) {
process.exit(1)
}
const { scripts = {} } = fes.readJsonSync(packageJsonPath)
const cmd = devCommands.find((key) => !!scripts[key])
await execLog('yarn', [cmd])
}准备
bin/dev.js
文件作为脚本启动文件1
2
3
4
5
6
7
8
9
10
const dev = require('../index')
try {
dev()
} catch (e) {
process.exit(1)
}
这样我们一个简单的npm包就开发好啦,在项目部内使用npm link
将脚本link到全局依赖中即可直接使用 dev
命令
发布
那我们如何发布npm包呢
注册npm账号
- npm官方网站
- 新建package
- package
- Organization,可使用@xxx/xxx 进行安装
版本号
- major 主版本号
- minor 次版本号
- patch 修复版本
如何发布
测试版本(以beta版本为例)
- npm publish –tag=beta –access=public
- npm i dev-command@beta 安装最新的beta版本
正式版本
- npm publish –access=public
- npm i dev-command@latest 安装最新的正式版本
仓库同步
如果你的项目使用阿里云或者其他公开的镜像仓库,需要等待该服务同步(一般来说时间不会太长),也可在各自平台的npm网站进行手动 sync