gpt4 book ai didi

npm 脚本使用 package.json 中指定的版本重命名文件

转载 作者:行者123 更新时间:2023-12-04 19:30:08 25 4
gpt4 key购买 nike

在我的 package.json 的脚本部分文件,我正在尝试重命名目录中的一些文件,但是我想在命令行中注入(inject)一个取自 package.json 的值本身(版本)。

所以在下面的例子中,build:rename脚本,我希望它在执行之前替换脚本中的 token ( somevalue )。

在这种情况下,我想传入 npm_package_version所以它是文件名的一部分。我很茫然...

"scripts": {
"build:copy": "mkdirp dist && cp src/*.js dist/",
"build:rename": "renamer --regex --find '(.+)(.js)' --replace '$1**somevalue**$2' dist/*"
}

最佳答案

当前versionpackage.json 中指定可以使用 package.json vars 通过脚本引用如下:

狂欢

在 bash shell 中使用语法 - (注意美元 $ 前缀):
$npm_package_version
window

在 cmd.exe 和 Powershell 中使用语法 - (注意百分比 % 前缀和后缀):
%npm_package_version%
跨平台

为了实现这个跨平台使用 cross-var :
$ npm i -D cross-varbuild:rename脚本可以修改如下:

"scripts": {
...
"build:rename": "cross-var \"renamer --regex --find '\\.js$' --replace '$npm_package_version.js' dist/*\""
},

注意:对 --find 的附加更改正则表达式为 cross-var--replace value 包括对 $1 中带括号的子字符串/组的美元引用( $2--find )值(value)。新的正则表达式只匹配以 .js 结尾的文件/字符串部分。反而。

示例目录

运行更新的 build:rename脚本,(当 version 中的 package.json0.3.0 时),将重命名 .js dist 中的文件从此目录:
.
├── dist
│   ├── a.html
│   ├── b.css
│   ├── foo.js
│   ├── bar.js
│   └── quux.js

...对此:
.
├── dist
│   ├── a.html
│   ├── b.css
│   ├── foo0.3.0.js
│   ├── bar0.3.0.js
│   └── quux0.3.0.js

附加说明

cp build:copy 中使用的命令脚本也不能跨平台工作。这可以替换为 copyfiles包裹:
$ npm i -D copyfiles
...和 build:copy然后将脚本替换为以下内容:

"scripts": {
"build:copy": "copyfiles -u 1 \"src/*.js\" \"dist\"",
...
},
mkdirp dist &&然后你的脚本中的部分变得多余,因为 copyfiles创建必要的目录(即 dist )。

如果您的用例不需要跨平台,那么只需留下 build:copy按原样编写脚本,然后更改您的 build:rename脚本:

"build:rename": "renamer --regex --find '\\.js$' --replace $npm_package_version'.js' dist/*"

关于npm 脚本使用 package.json 中指定的版本重命名文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43063029/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com