我在用复制文件作为一个 npmscirpt
copyfiles -u 2 /src/app/conf.dev.json dist/config/
但最后我想把文件重命名
如何将输入文件重命名为类似的名称conf.json
?
我检查了文档,没有发现可以实现copyfiles
。
有什么想法吗?
UPDATE:
我跟进这个使用 NPM 重命名文件但执行时出现错误npm run copy
:
"copy": "copyfiles -u 2 /src/app/conf.dev.json dist/config/ && node -e require('fs').rename('dist/config/conf.prod.json','dist/config/conf.json')"
FS.js:137
抛出新的 ERR_INVALID_CALLBACK();
^
类型错误 [ERR_INVALID_CALLBACK]:回调必须是函数
以下是一些可以成功满足您的要求的解决方案:
方案A
如中所述@vitorlui的回答 使用nodejs内置时回调参数是必需的fs.重命名().
另外,当使用node -e
通过 npm 脚本执行命令时,需要将脚本包装起来以 JSON 转义双引号进行计算,即\"...\"
.
-
例如,配置scripts
你的部分包.json如下:
"scripts": {
"rename": "node -e \"require('fs').rename('dist/config/conf.dev.json', 'dist/config/conf.json', function(err) { if (err) console.log(err); console.log('File successfully renamed!') })\"",
"copy": "copyfiles -u 2 \"src/app/conf.dev.json\" \"dist/config/\"",
"copy-and-rename": "npm run copy && npm run rename"
},
-
然后运行以下 npm 命令:
npm run copy-and-rename
-
成功完成后,在复制并重命名文件后,您应该会看到以下内容记录到控制台:
File successfully renamed!
方案B
您还可以考虑安装和使用renamer用于重命名文件。如果您的重命名要求变得比问题中提供的示例更复杂,或者您想要的内容比方案A.
安装并检查哪个版本:
-
cd
到您的项目目录并安装renamer
通过运行以下命令:
npm i -D renamer
-
然后运行以下命令来检查哪个版本renamer
已安装。
npm ls renamer
Note: 我之所以要求您检查安装的是哪个版本,是因为这将确定以下哪一个renamer
您应该使用的命令。如果安装的版本 =0.7.0,则略有不同:
如果安装的重命名器版本
-
Set the scripts
你的部分包.json至以下内容:
"scripts": {
"rename": "renamer --dry-run -f --regex \"^conf.dev.json$\" -r \"conf.json\" \"dist/config/*\"",
"copy": "copyfiles -u 2 \"src/app/conf.dev.json\" \"dist/config/\"",
"copy-and-rename": "npm run copy && npm run rename"
},
-
然后运行以下命令npm
命令:
npm run copy-and-rename
-
您应该会看到类似以下内容记录到控制台;
√ dist\config\conf.dev.json -> dist\config\conf.json
指示哪个路径名已更改。
您还会注意到复制文件的实际文件名没有更改,这是因为我们包含了--dry-run
选项。简单地省略--dry-run
脚本中的选项并运行命令再次更改实际文件名。
如果安装的重命名器版本 >=0.7.0
自 v0.7.0 以来发生了重大变化,其中包括删除--regex
option (see here欲了解更多信息)。从这个版本开始,现在提供了正则表达式文字。
对 API 的此更改导致rename
脚本(如前所示)需要重新定义如下:
"rename": "renamer -f \"/^conf.dev.json$/\" -r \"conf.json\" \"dist/config/*\"",
^ ^
Note: The --regex
选项已被省略,正则表达式现在是文字,即它现在包含在前导和尾随正斜杠中。另外,在这个例子中--dry-run
选项已删除,因此出于测试目的将其恢复。
补充笔记
对彼此而言方案A and 方案B,复制和重命名逻辑已添加到单独的 npm 脚本中,(即copy
and rename
分别)为了解释清楚。但是,您可以使用以下命令链接这两个命令&&
运算符来形成一个 npm 脚本 - 不过这一行会相当长:)
For 方案B,我经常使用的版本0.6.1
of renamer
,所以我跑;npm i -D [email protected]
安装,因为我通常需要支持旧版本的nodejs。在这种情况下我利用--regex
根据上述标题为的小节中所示的示例进行标记:“如果安装的重命名器版本.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)