一、创建一个文件夹
bash
mkdir hzz-test
cd hzz-test
二、初始化
csharp
npm init -y
三、进入VsCode,配置package.json,添加bin属性,编写脚手架代码
css
code .
- 创建一个bin文件夹,在下面创建index.js文件
- 在index.js文件中输入
javascript
#!/usr/bin/env node
console.log('hello hzz')
- 在package.json中配置
json
"bin": {
"hzz-test": "bin/index.js"
},
四、将脚手架发布到npm
npm login需要在npmjs镜像下登录,如果在淘宝镜像下登录会报错
npm login
npm publish
发布成功后到npmjs.com中查看
五、回到终端安装脚手架
安装包:
css
npm i -g hzz-test
运行包
hzz-test
注:
这样拥有的是一个和本地版本一样的包,本地更新和终端运行的一样,如果需要一个远程版本的(即发布版本)需要在一个目录下没有hzz-test的文件下去重新安装hzz-test(npm i -g hzz-test),然后再运行hzz-test就可以得到一个和远程版本一样的了。
六、脚手架本地调试方法
方法1:在hzz-test上级全局安装脚手架,然后运行
css
npm i -g hzz-test
hzz-test
方法2:移除安装的脚手架,然后在vscode脚手架项目中执行link命令去建立软链接
arduino
npm remove -g hzz-test
bash
npm link
七、分包(多个项目,在一个包中link另一个包)
再建一个文件夹,如hzz-test-lib
初始化:
bash
cd hzz-test-lib
npm init -y
hzz-test-lib文件夹下新建lib文件夹,lib下新建index.js文件(源码):
javascript
// lib/index.js 写一个sum方法
module.exports = {
sum(a, b) {
return a + b;
}
}
在hzz-test中直接引用hzz-test-lib这个包:
- 本地使用:
bash
cd hzz-test-lib
npm link
cd ..
cd hzz-test
npm link hzz-test-lib
npm install -S hzz-test-lib(会失败,因为hzz-test-lib还没有发布,所以需要手动到package.json中添加)
swift
// hzz-test/package.json
{
"name": "hzz-test1",
"version": "1.0.0",
"description": "",
"bin": {
"hzz-test": "bin/index.js"
},
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"hzz-test-lib": "^1.0.0"
}
}
在hzz-test的bin/index.js中使用hzz-test-lib包
javascript
#!/usr/bin/env node
const lib = require('hzz-test-lib')
console.log(lib, lib.sum(1, 2))
console.log('hello hzz 1111')
修改hzz-test-lib的入口文件:
因为hzz-test-lib下没有index.js文件,而是lib/index.js,所以main为lib/index.js
swift
// hzz-test-lib/package.json
{
"name": "hzz-test-lib",
"version": "1.0.2",
"description": "",
"main": "lib/index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC"
}
现在就可以运行了
bash
cd hzz-test
node bin/index.js
- hzz-test-lib发布上线后使用:
arduino
// 上线
cd hzz-test-lib
npm publish
解除link链接后才能使用,否则会默认本地
vbnet
cd hzz-test
npm link hzz-test-lib
npm unlink hzz-test-lib
npm remove -g hzz-test-lib
npm install -S hzz-test-lib // 此时hzz-test目录下会有一个node_modules文件夹,里面有一个hzz-test-lib文件夹
node bin/index.js
总结:
- 链接本地脚手架
bash
cd your-cli-dir
npm link
- 链接本地库文件
bash
cd your-lib-dir
npm link
cd your-cli-dir
npm link your-lib
- 取消链接本地库文件
bash
cd your-lib-dir
npm unlink
cd your-cli-dir
// link存在
npm unlink your-lib
// link不存在
rm -rf node_modules
npm install -S your-lib
理解npm link:
npm link your-lib
: 将当前项目中node_modules
下指定的库文件链接到node全局node_modules下的库文件npm link
: 将当前项目链接到node全局node_modules中作为一个库文件,并解析bin配置创建可执行文件
理解npm unlink:
npm unlink
: 将当前项目从node全局node_modules中移除npm unlink your-lib
: 将当前项目中的库文件依赖移除