我试图在Windows上管理反应项目的配置,它以前是在mac上运行的。我正在使用yarn build
。 package.json
scripts>build
内部已配置为"rm-rf deployment/static;react-scripts build && mv build deployment/static"
。由于rm-rf
和mv
命令适用于Linux,我尝试使用rmdir/del
和move
代替..但它似乎不起作用。我收到了错误:Parameter format not correct - "static"
。
答案 0 :(得分:2)
在Windows上通过命令提示符或 PowerShell 运行的build
脚本的等价物是:
"scripts": {
"build": "rd /s/q \"deployment/static\" 2> nul & react-scripts build && md \"deployment/static\" && move \"build\" \"deployment/static\""
}
<强>解释强>
rm-rf
等效项(cmd.exe)为rd /s/q
mv
等效项(cmd.exe)为move
所有目录路径都已包含在转义双引号\"...\"
中。例如;
deployment/static
已被重写为\"deployment/static\"
。
虽然在这种情况下并不完全需要转义双引号,但在路径可能包含空格或标点符号时,必须执行此操作。
分号;
已替换为单个&
运算符,以确保react-script build
部分运行,无论初始rd /s/q ...
命令是否失败或成功。
使用rd
删除可能不存在的文件夹/路径时,将在控制台上打印以下错误消息:
系统无法找到指定的路径
为防止此错误消息可能会被打印到控制台,我们会使用2> nul
部分将错误消息重定向至NUL
。
md \"deployment/static\"
部分使用Windows md
命令创建static
目录 - 这与bash中的mkdir
命令非常相似。注意:上述语法将在基于 nix 的操作系统(如macOS和Linux)上失败。
为了实现跨平台解决方案(即在Windows,Linux和macOS上成功运行的解决方案),我建议编写两个Nodejs实用程序脚本来替换rm -rf
和mv
bash命令。然后可以通过npm脚本调用这两个Nodejs脚本。
以下步骤描述了如何实现这一目标。
安装shelljs,为Nodejs提供可移植的Unix shell命令。为此,cd
到项目目录中运行以下命令:
npm i -D shelljs
使用以下内容创建名为rm.js
的新Nodejs脚本:
<强> rm.js 强>
const shell = require('shelljs');
const args = process.argv.slice(2);
const dir = args[0];
shell.rm('-rf', dir);
将此文件保存在项目目录的根目录中,与存储项目package.json
的级别相同。
使用以下内容创建另一个名为mv.js
的Nodejs脚本:
<强> mv.js 强>
const shell = require('shelljs');
const args = process.argv.slice(2);
const src = args[0];
const dest = args[1];
// Check src path has been provided and is valid
if (!src || !shell.test('-d', src)) {
console.log('\x1b[31m\x1b[40mERR!\x1b[0m src path cannot be found: %s', src);
process.exit(1);
}
// Check dest path has been provided.
if (!dest) {
console.log('\x1b[31m\x1b[40mERR!\x1b[0m dest path must be provided:');
process.exit(1);
}
// Make dest directory if necessary.
shell.mkdir('-p', dest);
// Move the file.
shell.mv(src, dest);
同时将此文件保存在项目目录的根目录中,与存储项目package.json
的级别相同。
然后在build
中配置您的package.json
脚本,如下所示:
"scripts": {
"build": "node rm \"deployment/static\" & react-scripts build && node mv \"build\" \"deployment/static\""
}
注意
通过阅读部分,在名为rm.js
的{{1}}中调用两个实用程序脚本mv.js
和npm-script
; <{1}}和build
。
如果您决定将这两个脚本存储在不同的文件夹而不是项目根目录中(如前面的步骤2和3中所述),那么您需要更改文件的路径。例如;如果它们都保存在名为node rm ...
的文件夹中,该文件夹位于项目目录的根目录中,那么您的node mv ...
脚本将更改为:
scripts
答案 1 :(得分:0)
出于这个原因,我使用rimraf。 全局安装
npm i -g rimraf
并按如下所示更新您的脚本
"rimraf deployment/static;react-scripts build && mv build deployment/static"
答案 2 :(得分:0)
shx 包应该可以很好地工作;他们甚至在最顶层的 package.json 演示中显示了 rm -rf