NPM:使package.json在Unix(Mac OSX)和Windows下都能工作
我从MacOSX下开发的第三方那里得到了一些NPM包。他们的构建可以使用package.json中的“scripts”对象拆分为开发或生产。例如:NPM:使package.json在Unix(Mac OSX)和Windows下都能工作,json,windows,node.js,unix,Json,Windows,Node.js,Unix,我从MacOSX下开发的第三方那里得到了一些NPM包。他们的构建可以使用package.json中的“scripts”对象拆分为开发或生产。例如: "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”来构建任
"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下工作,而无需编辑。您能否提供一些关于如何根据操作系统有条件地拆分构建的想法?我已经思考了一段时间,但我怀疑是否有任何美学解决方案可以使用这些工具来获得所需的效果 如果您能够影响
make.js
中的更改,我宁愿将此文件更改为接受prod
或dev
作为参数,例如:node make.js--build=dev
。使用默认值,以确保向后兼容性
仅使用npm而不修改make.js
,我可以考虑只运行另一个JavaScript代码,这将更改环境变量,然后调用make.js
这看起来像:
"build": "node middleman.js"
然后,Middleman.js文件可以使用或其他模块设置变量并执行节点make.js
文件
如果不想创建额外文件,则可以使用以下方法将所有JavaScript嵌入package.json中:
"build": "node -e 'my code'"
请注意,运行“node-e”process.env[\'node\u env\']=\'dev\'和&node make.js”将不起作用,因为process.env
在本地进程中设置变量,而不是全局变量(即不导出到系统)
这不是直接的解决方案,但为了最佳实践,让它与众不同。这个问题已经很老了,但对于现在面临这个问题的人来说,从版本>=5.1.0开始的npm支持为处理脚本设置shell。默认情况下,在Windows上,npm在内部使用cmd.exe运行脚本,即使npm命令本身是在git bash中键入的。将git bash设置为shell后,使用bash语法的脚本在Windows上正常工作:
npm配置集脚本shell“C:\\Program Files\\Git\\bin\\bash.exe”
这里,我们需要替换git bash可执行文件的正确路径。这些可能是相关的:@alandarev:第二个链接很有趣,但我不确定如何将其压缩到“脚本”下的命令中。我想我需要创建两个脚本——比如dev make和prod make——它们将只设置节点_ENV并调用make。请原谅我没有直接回复你-只是最初的声誉,我还不能回复…使用和它相当容易使用。谢谢!是的,让这些开关接受值并稍微更改make.js看起来是最优雅的解决方案。我可以与软件包开发人员沟通——我们有很好的联系。工作非常完美!这个答案应该是正确的,因为它在不增加LIB的情况下解决了问题。