使用npm_package_version的npm脚本

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)