我可以假设`node`总是在NPM的$ PATH设置中吗?

时间:2017-02-28 12:53:44

标签: node.js windows cross-platform

所以我几年来一直使用NPM作为一个简单的构建工具,我可以假设通过package.json安装的每个CLI工具都可以在PATH中使用,因为NPM添加了{{ 1}}它的路径。

但是当我准备写一个小的Node脚本做一些房屋清理工作时,我有点担心,如果NPM实际上在它给用户的PATH中有./node_modules/.bin可执行文件。这可能看起来很愚蠢,因为node中的所有脚本依赖于./node_modules/.bin在Unix上的包装器脚本能够找到它,但我认为可能会有一些魔力在Windows中。也许他们会使用自己的其他魔法。或者其他的东西。没关系,真的,我只是想断言:

node的{​​{1}}可执行文件始终位于由node提供给npm脚本的PATH上吗?在所有平台上?它是否与NPM运行时的节点始终相同?

这可能看起来太基本了,几乎不会被问到,但比抱歉更安全。

2 个答案:

答案 0 :(得分:1)

  

注意:不是明确的答案,但评论过于冗长

如果您查看为脚本设置的default values文档:

  

npm将根据包内容默认一些脚本值。

     

“start”:“node server.js”:

     

如果包的根目录中有server.js文件,则为npm   将start命令默认为 node server.js

虽然这不是您问题的明确答案,但如果没有定义node,npm会使用npm start作为默认值。这是一个明确的指标,npm依赖节点在所有情况下都存在。

答案 1 :(得分:1)

在Windows上,您可以安全地假设npm要求节点位于PATH中,或者与npm位于同一文件夹中。这来自npm.cmd(键入npm时调用的脚本):

SET "NODE_EXE=%~dp0\node.exe"
IF NOT EXIST "%NODE_EXE%" (
  SET "NODE_EXE=node"
)