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

Cre*_*ven 18 node.js bower

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

ala*_*rev 20

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

NPM网站声明:

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

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

  • "node_modules中的bin文件夹"第三个结果,标题为"npm-folders" (4认同)
  • 好。谢谢。我不知道如何在Google中找到此类信息。我有什么办法可以在Google中找到.bin目的?实际上,我现在正在尝试查找什么是config.rb文件,但是却一无所获。谢谢 (2认同)

Joã*_*ira 12

该目录node_modules/.bin是存储项目使用的模块的二进制文件的地方,通常使用符号链接到相应模块目录中的各个二进制文件。例如,这就是我standard从 npm 包标准(JavaScript 样式指南、linter 和格式化程序)中查看二进制文件的方式

$ ls node_modules/.bin/standard -l
lrwxrwxrwx 1 jfolpf jfolpf 22 jul 17 08:29 standard -> ../standard/bin/cmd.js
Run Code Online (Sandbox Code Playgroud)

当我运行时,node_modules/.bin/standard我确实在运行node_modules/standard/bin/cmd.jsnpm 包standard。这个符号链接是在安装包时创建的,也就是说,在npm install standard

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

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

"scripts": {
  "start": "standard src/*.js",
  "test": "standard src/*.js && node myTest.js"
}
Run Code Online (Sandbox Code Playgroud)

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

"start": "node_modules/.bin/standard src/*.js",
Run Code Online (Sandbox Code Playgroud)

  • 值得一提的是,来自“devDependency”的任意二进制文件都可以通过这种方式运行。`npm run <script_name>` 可用于此目的。这很重要,因为允许您摆脱全局依赖项来启动/构建/测试您的项目,并摆脱大自述文件,该自述文件描述了您需要安装哪个依赖项的版本才能使所有这些工作正常进行。唯一剩下的全局依赖是 Node 本身。这也可以通过一些节点版本管理器(例如 Volta)来解决,它可以将 Node 版本固定到你的“package.json”。 (2认同)
  • 多谢!这绝对应该是公认的答案:) (2认同)