Ron*_*ips 4 npm package.json npm-scripts
在我的package.json文件的脚本部分,我正在尝试重命名目录中的一些文件,但是我想在命令行中注入一个从package.json自身(版本)中获取的值.
所以在下面的build:rename脚本中,我希望它somevalue在执行之前替换script()中的标记.
在这种情况下,我想传入npm_package_version它,以便它是文件名的一部分.我不知所措......
"scripts": {
"build:copy": "mkdirp dist && cp src/*.js dist/",
"build:rename": "renamer --regex --find '(.+)(.js)' --replace '$1**somevalue**$2' dist/*"
}
Run Code Online (Sandbox Code Playgroud)
Rob*_*obC 11
可以使用package.json变量通过脚本引用version指定的当前值,如下所示:package.json
庆典
在bash shell中使用语法 - (注意美元$前缀):
$npm_package_version
视窗
在cmd.exe和Powershell中使用语法 - (注意百分比%前缀和后缀):
%npm_package_version%
跨patform
要实现这种跨平台的utlize 交叉变换:
$ npm i -D cross-var
该build:rename脚本可以修改如下:
"scripts": {
...
"build:rename": "cross-var \"renamer --regex --find '\\.js$' --replace '$npm_package_version.js' dist/*\""
},
Run Code Online (Sandbox Code Playgroud)
注意:当值包含对值中带括号的子串/组的美元引用(,)时,对--find正则表达式的额外更改cross-var似乎不太好.新的正则表达式简单地匹配以结尾的文件/字符串部分.--replace$1$2--find.js
示例目录
运行更新build:rename脚本,(当version在package.json为0.3.0),将重命名.js的文件dist从该目录:
.
??? dist
? ??? a.html
? ??? b.css
? ??? foo.js
? ??? bar.js
? ??? quux.js
Run Code Online (Sandbox Code Playgroud)
......对此:
.
??? dist
? ??? a.html
? ??? b.css
? ??? foo0.3.0.js
? ??? bar0.3.0.js
? ??? quux0.3.0.js
Run Code Online (Sandbox Code Playgroud)
附加说明
脚本中使用的cp命令build:copy也不能跨平台工作.这可以用copyfiles包代替:
$ npm i -D copyfiles
...然后build:copy脚本替换为以下内容:
"scripts": {
"build:copy": "copyfiles -u 1 \"src/*.js\" \"dist\"",
...
},
Run Code Online (Sandbox Code Playgroud)
然后mkdirp dist &&,脚本中的部分变得多余,就像copyfiles创建必要的目录(即dist)一样.
如果您的用例不需要跨平台,那么只需将build:copy脚本保持原样,并将build:rename脚本更改为:
"build:rename": "renamer --regex --find '\\.js$' --replace $npm_package_version'.js' dist/*"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5692 次 |
| 最近记录: |