2017-02-28 43 views
1

所以我已经使用NPM作为一个简单的构建工具几年,我可以假设通过package.json安装的每个CLI工具在PATH中可用,因为NPM将./node_modules/.bin路径添加到它。

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

是在node执行总是由NPM给NPM脚本PATH?在所有平台上?它和NPM运行的节点是否一样?

这似乎过于基本,几乎可以问,但比抱歉更安全。

回答

1

注:没有一个明确的答案,但过于冗长的评论

如果你看一下在default values的文档被设置为脚本:

NPM将默认一些基于包内容的脚本值。

“开始”:“节点server.js”:

如果在你的包的根server.js文件,然后NPM 将默认启动命令节点server.js

虽然这不是一个明确的回答你的问题,NPM使用node作为默认的情况下,没有定义npm start。这是一个明确的指标,npm依赖节点在任何情况下都存在。

+0

这是一个非常好的迹象:) – oligofren

1

在Windows上,您可以安全地假设npm要求节点位于PATH中,或与npm位于同一文件夹中。这是从npm.cmd(也就是当你输入NPM调用的脚本):

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