如何使用npm脚本重命名文件

qyzbxkaa  于 2023-11-18  发布在  其他
关注(0)|答案(4)|浏览(166)

我使用copyfiles作为npm scirptcopyfiles -u 2 /src/app/conf.dev.json dist/config/,但最终我想重命名文件
如何将输入文件重命名为conf.json
我检查了文档,没有发现可以用copyfiles实现。有什么想法吗?

UPDATE:我跟进了这个Rename file with 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 throw new ERR_INVALID_CALLBACK(); ^
TypeError [ERR_INVALID_CALLBACK]:回调必须是函数

zphenhs4

zphenhs41#

下面是几个解决方案,以成功地满足您的要求:

解决方案A

正如@vitorlui的回答中所指出的,当使用nodejs内置的fs.rename()时,回调参数是强制性的。
此外,当通过npm脚本使用node -e命令时,需要将脚本 Package 为JSON转义双引号,即\"...\"
1.例如,如下配置 package.jsonscripts部分:

"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"
},

字符串
1.然后运行以下npm命令:

npm run copy-and-rename


1.成功完成后,在复制并重命名文件后,您应该看到以下内容记录到控制台:
File successfully renamed!

解决方案B

您还可以考虑安装并使用renamer来重命名文件。如果您的重命名要求比您的问题中提供的示例更复杂,或者如果您想要比 * 解决方案A* 更详细的东西,这可能是有益的。

安装并检查版本:

  1. cd到你的项目目录,然后通过运行以下命令安装renamer
npm i -D renamer


1.然后运行以下命令检查安装的renamer版本。

npm ls renamer

注意: 我之所以要求您检查安装的版本,是因为这将决定您应该使用以下哪些renamer命令。如果安装的版本为=0.7.0,则略有不同<0.7.0 or >:

如果安装的重命名器版本<0.7.0

1.将 package.jsonscripts部分设置为:

"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"
},


1.然后运行以下npm命令:

npm run copy-and-rename


1.您应该会看到类似以下内容记录到您的控制台;
√ dist\config\conf.dev.json -> dist\config\conf.json
以指示更改的路径名。
1.您还将注意到,复制文件的实际文件名没有更改,这是因为我们包含了--dry-run选项。只需从脚本中忽略--dry-run选项,然后再次运行命令 *,即可更改实际文件名。

如果安装的重命名器版本>=0.7.0

自v0.7.0以来有一个突破性的变化,包括删除--regex选项 (更多信息请参见here。从这个版本开始,现在提供了正则表达式文字。
对API的这一更改导致rename脚本(如前所示)需要重新定义如下:

"rename": "renamer -f \"/^conf.dev.json$/\" -r \"conf.json\" \"dist/config/*\"",
                        ^               ^

注意:--regex选项已被省略,regexp现在是一个文字,即它现在被 Package 在一个前导和尾随的正斜杠中。此外,在这个例子中,--dry-run选项被删除,因此出于测试目的,恢复它。

注意事项

  • 对于 * 解决方案A* 和 * 解决方案B*,复制和重命名逻辑已添加到单独的npm脚本中(分别为copyrename),以便于解释。但是,您可以使用&&操作符将两个命令链接起来,以形成一个npm脚本-单行将相当长:)
  • 对于 * 解决方案B*,我经常使用renamer0.6.1版本,所以我运行; npm i -D [[email protected]](https://stackoverflow.com/cdn-cgi/l/email-protection)来安装,因为我通常需要支持旧版本的nodejs。在这种情况下,我按照前面标题为 “如果安装的重命名器版本<0.7.0” 的小节中所示的示例使用--regex标志。
8fsztsew

8fsztsew2#

您必须定义回调函数:

fs.rename('oldFile.txt', 'newFile.txt', (err) => {
  if (err) throw err;
  console.log('Rename complete!');
});

字符串
就像这样:

"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' , (err) => { (err? console.log(err) : console.log('Rename complete!') ) } )"


@请参阅https://nodejs.org/api/fs.html#fs_fs_rename_oldpath_newpath_callback

czq61nw1

czq61nw13#

您可以使用此库。https://www.npmjs.com/package/move-file只是移动如果到“新名称”

g9icjywg

g9icjywg4#

解决方案

您可以使用名为move-file-cli的npm包,该包允许通过(跨平台)CLI重命名文件,然后在npm脚本中使用命令“move-file”重命名文件

安装

第一个月

利用率

move-file <source-path> <destination-path>
可选-不覆盖现有目标文件:--no-overwrite

相关问题