我使用copyfiles作为npm scirpt
copyfiles -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]:回调必须是函数
4条答案
按热度按时间zphenhs41#
下面是几个解决方案,以成功地满足您的要求:
解决方案A
正如@vitorlui的回答中所指出的,当使用nodejs内置的fs.rename()时,回调参数是强制性的。
此外,当通过npm脚本使用
node -e
命令时,需要将脚本 Package 为JSON转义双引号,即\"...\"
。1.例如,如下配置 package.json 的
scripts
部分:字符串
1.然后运行以下npm命令:
型
1.成功完成后,在复制并重命名文件后,您应该看到以下内容记录到控制台:
File successfully renamed!
个解决方案B
您还可以考虑安装并使用renamer来重命名文件。如果您的重命名要求比您的问题中提供的示例更复杂,或者如果您想要比 * 解决方案A* 更详细的东西,这可能是有益的。
安装并检查版本:
cd
到你的项目目录,然后通过运行以下命令安装renamer
:型
1.然后运行以下命令检查安装的
renamer
版本。型
注意: 我之所以要求您检查安装的版本,是因为这将决定您应该使用以下哪些
renamer
命令。如果安装的版本为=0.7.0,则略有不同<0.7.0 or >:如果安装的重命名器版本<0.7.0
1.将 package.json 的
scripts
部分设置为:型
1.然后运行以下
npm
命令:型
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
脚本(如前所示)需要重新定义如下:型
注意:
--regex
选项已被省略,regexp现在是一个文字,即它现在被 Package 在一个前导和尾随的正斜杠中。此外,在这个例子中,--dry-run
选项被删除,因此出于测试目的,恢复它。注意事项
copy
和rename
),以便于解释。但是,您可以使用&&
操作符将两个命令链接起来,以形成一个npm脚本-单行将相当长:)renamer
的0.6.1
版本,所以我运行;npm i -D [[email protected]](https://stackoverflow.com/cdn-cgi/l/email-protection)
来安装,因为我通常需要支持旧版本的nodejs。在这种情况下,我按照前面标题为 “如果安装的重命名器版本<0.7.0” 的小节中所示的示例使用--regex
标志。8fsztsew2#
您必须定义回调函数:
字符串
就像这样:
型
@请参阅https://nodejs.org/api/fs.html#fs_fs_rename_oldpath_newpath_callback
czq61nw13#
您可以使用此库。https://www.npmjs.com/package/move-file只是移动如果到“新名称”
g9icjywg4#
解决方案
您可以使用名为move-file-cli的npm包,该包允许通过(跨平台)CLI重命名文件,然后在npm脚本中使用命令“move-file”重命名文件
安装
第一个月
利用率
move-file <source-path> <destination-path>
个可选-不覆盖现有目标文件:--no-overwrite