NPM 脚本 - 配置变量和命令替换在 package.json 中不起作用

Posted

技术标签:

【中文标题】NPM 脚本 - 配置变量和命令替换在 package.json 中不起作用【英文标题】:NPM scripts - config variables and command substitution not working in package.json 【发布时间】:2016-03-05 18:55:48 【问题描述】:

案例1:使用变量名代替值

package.json:


  "name": "example",
  "config": 
    "url": "localhost/dev"
  ,
  "scripts": 
    "watch": "browser-sync start --files \"./**/*, !.node_modules/, !src\" --proxy $npm_package_config_url"
  

$npm run watch 在浏览器中打开http://localhost:3000/$npm_package_config_url,而不是http://localhost:3000/dev

所以,$npm_package_config_url 被用作字符串,而不是变量。

案例 2: 命令替换不起作用

 
   ... ,
  "scripts": 
    "rm:all": "npm rm $(ls -1 node_modules | tr '/\\n' ' ')"
   

子命令列出 node_modules 中的文件夹。

同样,npm run rm:all 什么也不做,因为 $(ls -1 node_modules | tr '/\\n' ' ') 被解释为文件夹名称。

环境:Windows 10 | npm 3.5.1 |节点 4.2.2 | git-bash 2.6.0

【问题讨论】:

【参考方案1】:

有点晚了,但在 Windows 上你需要使用%npm_package_config_url%

有一个潜在的软件包可以为您“解决”这个问题(即给您一个解决方法)(https://www.npmjs.com/package/cross-env),在其中一篇 npm 问题帖子中被引用。

【讨论】:

cross-env 将帮助设置环境变量跨平台,如果你想在你的脚本中以跨平台的方式使用环境变量,使用cross-var 你用这个答案为我节省了很多时间:) 在 windows 10 上不工作,经过 cmd 和 powershell 测试 @silvos ,这是它工作的 Windows 10。也许从那以后发生了一些变化——如果你制定出新的解决方案,你能添加一个更新的答案吗? @Robbie 发现 NPM 中存在一个错误,已在 7.7.0 版中修复 github.com/npm/cli/issues/2731 现在它正在工作 - thx

以上是关于NPM 脚本 - 配置变量和命令替换在 package.json 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 sed 或 awk 命令用变量(变量保存 Unix 脚本)查找和替换文本

npm配置文件脚本定义.md

npm : 无法将“npm”项识别为 cmdlet函数脚本文件或可运行程序的名称。请检查

json 配合Vue.js配置Webpack -27。通过npm脚本简化的webpack和webpack-dev-server命令

json 配合Vue.js配置Webpack - 26.通过npm脚本来执行webpack和webpack-dev-server命令

如何在 NPM 脚本中使用 Windows 控制台“设置”变量?