盒子
盒子
文章目录
  1. npm link的使用
    1. 简单使用
    2. 可执行脚本的开发

npm link的使用

npm link的使用

简单使用

npm link在开发公共模块的时候很有用,当你本地开发一个公共模块时,又在自己的本地项目用到,原始的做法可能是,把公共模块,拷贝到本地项目的node_modules模块里,然后本地开发的同时,调试公共模块,这样子虽然简单但是低效。

npm的link命令提供了简单高效的办法,在公共模块目录下,执行npm link命令,会在全局node_modules目录下生成一个符号链接,指向本地公共模块的目录。然后在本地项目直接require进来即可,系统最后会找到全局目录下的公共模块。

例1-1

1
2
3
4
5
➜ testlink npm link
npm WARN hello1@ No description
npm WARN hello1@ No repository field.
npm WARN hello1@ No license field.
/usr/local/lib/node_modules/testlink -> /Users/[yourHomePath]/demo/testlink
可执行脚本的开发

可执行脚本可以方便执行一些常用的命令,免去手动重复性的动作。

可执行脚本sayHello:

例1-2

1
2
#!/usr/bin/env node
console.log( 'hello world!' , process.argv[2] )

然后修改sayHello文件的权限(读取r的权限等于4;写入w的权限等于2;执行x的权限等于1。7(4+2+1 | 读取+写入+执行))

1
chmod 755 sayHello

执行上述命令,sayHello就可以执行了

1
./sayHello

这种形式,需要每次执行sayHello命令需要加上路径前缀。更合理的做法是使用bin。

在公共模块的package.json文件里加上如下代码

例1-3

1
2
3
4
5
6
{
"name": "testlink" ,
"bin": {
"hello" : "sayHello"
}
}

name执行公共模块的名字,bin执行需要全局加入的可执行命令。bin的键,全局执行的命令名,键值执行全局命令的具体可执行文件,例如"hello": "./bin/sayHello"表示当前目录下的bin目录,里面的sayHello可执行文件。

接下来,在公共模块的目录下,执行npm link命令

例1-4

1
2
3
4
5
6
➜ testlink npm link
npm WARN testlink@ No description
npm WARN testlink@ No repository field.
npm WARN testlink@ No license field.
/usr/local/bin/hello -> /usr/local/lib/node_modules/testlink/sayHello
/usr/local/lib/node_modules/testlink -> /Users/[yourHomePath]/demo/testlink

可以看出hello的全局执行的命令名,映射到了/usr/local/lib/node_modules/testlink/sayHello这个具体的可执行文件( 注意⚠️,全局node_modules下的testlink目录是个符号链接,但是读写效果和具体文件路径一样 )。然后/usr/local/lib/node_modules/testlink全局的模块(符号链接),映射到了具体本地的/Users/[yourHomePath]/demo/testlink公共模块开发目录。

接下来,执行sayHello可执行文件不需要加上路径前缀了,在任何目录下,执行

例1-5

1
2
3
hello 'abc'
# 打印出
hello world! abc

现在比每次加目录前缀方便多了。

参考资料

1、《Node.js 命令行程序开发教程》

支持一下
扫一扫,支持lcoder