node_modules中.bin文件夹的用途是什么?

时间:2014-08-14 10:46:22

标签: node.js bower

今天有一位同事向我解释了如何创建nodejs项目,我注意到在./node_modules中有一个名为.bin的隐形文件夹。我必须说我在添加到项目后发现了这一点" bootcamp"和"凉亭"工具。什么是.bin目的?它是为什么创造的?

2 个答案:

答案 0 :(得分:15)

这是一个文件夹,其中包含节点模块中的二进制文件(可执行文件)。

NPM site states

  

可执行文件在全局模式下,可执行文件被链接到   在Unix上使用{prefix} / bin,或直接在Windows上使用{prefix}。

     

在本地模式下,可执行文件链接到./node_modules/.bin中   他们可以通过npm运行脚本。 (对于   例如,运行npm时测试运行器将在路径中   测试。)

答案 1 :(得分:0)

目录node_modules/.bin是项目使用的模块二进制文件的存储位置,通常使用符号链接指向相应模块目录中各个二进制文件的位置。例如,这就是我从npm软件包标准(JavaScript样式指南,linter和formatter)中看到二进制文件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软件包node_modules/standard/bin/cmd.js运行standard。此符号链接是在安装软件包后即npm install standard

上创建的

这些二进制文件还允许您直接从npm脚本中使用模块。例如,您可能尚未在standard上全局安装npm install standard -g,这意味着您不能直接在模块主目录的终端上运行standard

但是您可以通过将以下内容分别添加到package.json中来编写npm startnpm test脚本:

"scripts": {
  "start": "standard src/*.js",
  "test": "standard src/*.js && node myTest.js"
}

,这完全正确,因为您具有标准的项目依赖项。即使该模块不是全局模块,也不可由操作系统直接使用,npm仍可以为给定的standard模块名称查找bin文件夹并触发已编译的二进制文件。所以确实,npm运行这样的脚本:

"start": "node_modules/.bin/standard src/*.js",