【问题标题】:What is the purpose of .bin folder in node_modules?node_modules 中 .bin 文件夹的用途是什么?
【发布时间】:2014-10-07 23:51:05
【问题描述】:

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

【问题讨论】:

    标签: node.js bower


    【解决方案1】:

    目录node_modules/.bin 是存储项目使用的模块的二进制文件的地方,通常使用指向相应模块目录中相应二进制文件的符号链接。例如,这就是我从 npm 包标准(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 脚本中使用模块。例如,您可能没有在全局范围内安装 standardnpm install standard -g,这意味着您无法直接从终端上的模块主目录运行 standard

    但是您可以编写一个npm startnpm test 脚本,分别将以下内容添加到您的package.json

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

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

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

    【讨论】:

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

    这是您的节点模块中的二进制文件(可执行文件)所在的文件夹。

    NPM site states:

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

    在本地模式下,可执行文件被链接到 ./node_modules/.bin 所以 它们可以用于通过 npm 运行的脚本。 (为了 例如,当您运行 npm 时,测试运行程序将在路径中 测试。)

    【讨论】:

    • 好的。谢谢。我不知道如何在 Google 中找到此类信息。有什么办法可以在 Google 中找到 .bin 的目的吗?实际上,我现在正在尝试查找什么是 config.rb 文件,但我什么也没得到。谢谢
    • “node_modules 中的 bin 文件夹”我的第三个结果,标题为“npm-folders”
    猜你喜欢
    • 2020-11-27
    • 2019-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-03
    • 2012-03-14
    • 2020-02-22
    相关资源
    最近更新 更多