今天,一位同事向我解释了如何创建Node.js项目,我发现在./node_modules中有一个名为.bin的隐藏文件夹。我必须说,在添加“bootcamp”和“bower”工具到该项目后,我才发现了这一点。.bin是用来做什么的?它是被创建出来干什么的?
那是存放来自你的节点模块的二进制文件(可执行文件)的文件夹。
NPM网站的说明如下:
当处于全局模式时,可执行文件链接到Unix上的{prefix}/bin或直接链接到Windows上的{prefix}。
当处于本地模式时,可执行文件链接到./node_modules/.bin中,以便它们可以在通过npm运行的脚本中使用。(例如,当您运行npm test时,测试运行程序将在路径中。)
node_modules/.bin
目录是存储项目所使用的模块二进制文件的地方,通常使用符号链接指向相应模块目录中的二进制文件。例如,我是通过这种方式查看npm包standard(JavaScript风格指南、linter和格式化程序)中的二进制文件standard
。
$ ls node_modules/.bin/standard -l
lrwxrwxrwx 1 jfolpf jfolpf 22 jul 17 08:29 standard -> ../standard/bin/cmd.js
当我运行命令node_modules/.bin/standard
时,实际上我正在运行来自npm包standard
的node_modules/standard/bin/cmd.js
。这个符号链接是在安装该软件包时创建的,也就是说,在执行npm install standard
命令时创建的。npm install standard -g
全局安装standard
,这意味着您无法在终端上直接运行standard
到您的模块的主目录中。package.json
中,编写npm start或npm test脚本:"scripts": {
"start": "standard src/*.js",
"test": "standard src/*.js && node myTest.js"
}
只要你的项目依赖有 standard,那么这完全是正确的。即使该模块不是全局模块,也无法被操作系统直接使用,npm 仍然可以查找给定名称为 standard
的模块的 bin 文件夹,并触发编译后的二进制文件。因此,确实是 npm 运行了这样的脚本:
"start": "node_modules/.bin/standard src/*.js",
devDependencies
中的任意二进制文件。可以使用npm run <script_name>
来实现。这很重要,因为它允许您摆脱全局依赖项以启动/构建/测试项目,并且可以摆脱大型README,该README描述了需要安装哪个版本的哪个依赖项才能使所有内容正常工作。唯一剩下的全局依赖项是Node本身。而且这也可以通过某些Node版本管理器(如Volta)解决,可以将Node版本固定到您的“package.json”文件中。 - Ruslan Stelmachenko