前言
我在使用npm link
与npm bin
的相关配置时,学会了一些知识,也碰到了一些比较烦人的问题,有点懵懂。
bin
package.json中的bin
字段是命令名到本地名的映射,在安装时,npm 会将文件符号链接到 prefix/bin 以进行全局安装。
当我们使用 npm 或者 yarn 命令安装包时,如果该包的 package.json 文件有 bin 字段,就会在 node_modules 文件夹下面的 .bin 目录中复制了 bin 字段链接的执行文件。我们在调用执行文件时,可以不带路径,直接使用命令名来执行相对应的执行文件。
说了这么多看不懂的鸟话,现在来说点人话,直接看下图,bin属性中key值是你想要使用的命令名(命令名你随意起),value值是你想要执行的文件。
在想要执行的文件开头要加上一句固定语句,这是官网上说明的。
我查了一下这个语句啥意思,发现还有另外一种写法,如下所示。第一种是直接执行/usr/bin/目录下面的node,第二种事在环境变量中查找node,建议使用第二种,因为第一种你不能保证所有人的node安装路径都是在同一文件路径下。
- #!/usr/bin/node
- #!/usr/bin/env node
此语句含义所参考文章:https://blog.csdn.net/weixin_43990297/article/details/122330673
上面步骤走完后,我想在终端直接输入zyues就可以执行我想执行的文件,发现不行。
下面要结合npm link使用了。
npm link
使用npm link能够避免重复且繁琐的打包发布操作,给开发调试带来便捷。基础的功能可以参考下面这篇文章。
npm-link基本使用:https://zhuanlan.zhihu.com/p/361856970
我这里主要是使用npm link将项目链接到node全局,直接使用npm link看效果。
我看到将我的整个项目都链接进了node全局,且增加了全局命令zyues,打开zyues里面的内容看不懂,但是可以看到最终执行的是 node index.js
,执行的是链接进全局中的文件,且本地项目进行修改时,链接进node全局中的对应项目会实时同步修改。
此时在终端输入zyues就可以直接执行对应的项目。
npm link测试完成之后,现在我想卸载链接进node全局的项目与对应的全局命令,网上都是使用npm unlink
使用网上查到的npm unlink node_new_cli命令发现不起作用,没报错也不给我删除:
使用了另外一套流程:
npm ls --global --depth 0 // 列出所有顶级依赖项
npm ls --global node_new_cli // 检查是否安装了包
npm rm --global node_new_cli // 卸载全局链接的node_new_cli包\
sudo npm rm --global foo // 无权限时可以加上sudo
这套流程可以成功删除,而且我看到把我本地项目的node_modules文件夹也给删除了,不过问题不大。
总结
这些只是基础知识,后面会多看些其它文章来深入理解。后面可能还会研究一下将此项目以npm包的形式发布,然后以npm的方式进行安装。类似于npm install webapck -g,安装后就可以直接在终端输入webpack执行相应命令。