【问题标题】:NPM: make package.json work under both Unix (Mac OSX) and WindowsNPM:使 package.json 在 Unix (Mac OSX) 和 Windows 下都能工作
【发布时间】:2014-07-08 15:38:49
【问题描述】:

我从在 Mac OSX 下开发的第三方那里获得了一些 NPM 包。他们的构建可以使用 package.json 中的“脚本”对象拆分为开发或生产。例如:

 "scripts": {
    "build": "NODE_ENV=dev node make.js --build",
    "build-prod": "NODE_ENV=prod node make.js --build",
  }

在 Unix 下,可以运行“npm run build”或“npm run build-prod”来构建任一目录(当然,make.js 中有一些条件语句)。 当然,它在 Windows 下不起作用——我不得不更改类似这样的命令:

 "scripts": {
    "build": "set NODE_ENV=dev&& node make.js --build",
    "build-prod": "set NODE_ENV=prod&& node make.js --build",
  }

(请注意,重要的是不要在 '&&' 之前放置一个空格 - 否则创建的环境变量中有一个额外的空格,这会破坏 make.js 中的所有比较)。

但是,我想要一些通用的源代码树,它可以在 Unix 或 Windows 下工作而无需编辑。您能否就如何根据操作系统有条件地拆分构建提供一些想法?

【问题讨论】:

  • @alandarev:第二个链接很有趣,但我不确定如何将其压缩到“脚本”下的命令中。我想我需要创建两个脚本——比如 dev-make 和 prod-make——它们只会设置 NODE_ENV 并调用 make。请原谅我没有直接回复你 - 只是最初的声誉,我还不能回复......
  • 使用npmjs.com/package/cross-env,它非常易于使用。

标签: json windows node.js unix


【解决方案1】:

这个问题已经很老了,但是对于现在面临这个问题的人来说,npm 从 >=5.1.0 版本开始支持设置 shell 来处理脚本。默认情况下,在 Windows 上,npm 在内部使用 cmd.exe 来运行脚本,即使 npm 命令本身是在 git-bash 中键入的。将 git-bash 设置为 shell 后,使用 bash 语法的脚本在 Windows 上正常工作:

npm config set script-shell "C:\\Program Files\\Git\\bin\\bash.exe"

这里需要将他的正确路径替换为 git-bash 可执行文件。

【讨论】:

  • 完美运行!这个答案应该是正确的答案,因为它在没有额外库的情况下解决了这个问题。
【解决方案2】:

我一直在思考,但我怀疑是否有任何美学解决方案可以使用这些工具来获得预期的效果。

如果您能够影响make.js 的更改,我宁愿更改此文件以接受proddev 作为参数,例如:node make.js --build=dev。使用默认值,保证向后兼容。

只使用npm而不修改make.js,我可以想到只运行另一个JavaScript代码,这会改变环境变量,然后调用make.js

这看起来像:

"build": "node middleman.js"

Middleman.js 文件然后可以使用child_process 或其他模块来设置变量并执行node make.js 文件。

如果您不想创建额外的文件,则可以使用以下命令将所有 JavaScript 嵌入到 package.json 中:

"build": "node -e 'my code'"

请注意,运行 "node -e 'process.env[\'NODE_ENV\']=\'dev\' && node make.js" 将不起作用,因为 process.env 在本地进程中设置变量,而不是全局(即不导出到系统)。


不是直接的解决方案,但为了最佳实践,让它发挥作用。

【讨论】:

  • 谢谢!是的,让这些开关接受值并稍微改变 make.js 看起来是最优雅的解决方案。我可以将这一点传达给软件包开发人员 - 我们的关系很好。
猜你喜欢
  • 1970-01-01
  • 2010-12-13
  • 1970-01-01
  • 2014-10-09
  • 1970-01-01
  • 2012-10-25
  • 2016-04-24
  • 2019-07-13
  • 2020-03-11
相关资源
最近更新 更多