我正在尝试在 Windows 上管理 React 项目的配置,它之前在 Mac 上运行。我在用着yarn build
。在 - 的里面package.json
scripts>build
被配置为"rm-rf deployment/static;react-scripts build && mv build deployment/static"
。自从rm-rf
and mv
命令适用于Linux,我尝试使用rmdir/del
and move
相反..但它似乎不起作用。我收到错误:Parameter format not correct - "static"
.
Windows 解决方案 (cmd.exe)
相当于那个build
脚本运行通过命令提示符 or 电源外壳在 Windows 上是:
"scripts": {
"build": "rd /s/q \"deployment/static\" 2> nul & react-scripts build && md \"deployment/static\" && move \"build\" \"deployment/static\""
}
解释:
- The
rm-rf
Windows 的等效项 (cmd.exe) 是rd /s/q https://ss64.com/nt/rd.html
- The
mv
Windows 的等效项 (cmd.exe) 是move https://ss64.com/nt/move.html
-
所有目录路径都已用转义双引号引起来\"...\"
。例如;
deployment/static
已被重写为\"deployment/static\"
.
尽管在这种情况下,转义双引号并不是完全必要的,但当路径可能包含空格或标点符号时,这样做是一种很好的做法,并且有必要这样做。
分号;
已被替换为单一的&
运营商以确保react-script build
无论初始部分是否运行rd /s/q ...
命令失败或成功。
-
使用时控制台会打印以下错误信息rd
删除可能不存在的文件夹/路径:
该系统找不到指定的路径
为了防止此错误消息可能被打印到控制台,我们将错误消息重定向到NUL
使用2> nul https://support.microsoft.com/en-us/help/110930/redirecting-error-messages-from-command-prompt-stderr-stdout part.
- The
md \"deployment/static\"
部分利用Windowsmd https://ss64.com/nt/md.html命令使static
目录 - 这与mkdir
bash 中的命令。
Note:上面的语法将失败nix基于操作系统,例如 macOS 和 Linux。
跨平台解决方案(Windows/Linux/macOS...)
为了实现跨平台解决方案(即在 Windows、Linux 和 macOS 上成功运行的解决方案),我建议编写两个 Nodejs 实用程序脚本来替代rm -rf https://ss64.com/bash/rm.html and mv https://ss64.com/bash/mv.htmlbash 命令。然后可以通过 npm 脚本调用这两个 Nodejs 脚本。
以下步骤描述了如何实现这一点。
-
Install shelljs https://github.com/shelljs/shelljs它为 Nodejs 提供可移植的 Unix shell 命令。去做这个,cd
到您的项目目录并运行以下命令:
npm i -D shelljs
-
创建一个名为的新 Nodejs 脚本rm.js
包含以下内容:
rm.js
const shell = require('shelljs');
const args = process.argv.slice(2);
const dir = args[0];
shell.rm('-rf', dir);
将此文件保存在项目目录的根目录中,与项目所在的级别相同package.json
被储存了。
-
创建另一个名为的 Nodejs 脚本mv.js
包含以下内容:
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\""
}
Note
两个实用程序脚本rm.js
and mv.js
被调用在npm-script
named build
通过零件读取;node rm ...
and node mv ...
分别。
如果您决定将这两个脚本存储在不同的文件夹而不是项目根目录中(如前面的步骤 2 和 3 中建议的那样),那么您需要更改文件的路径。例如;如果它们都保存在名为的文件夹中scripts
它位于项目目录的根目录中,然后是build
脚本将更改为:
"scripts": {
"build": "node scripts/rm \"deployment/static\" & react-scripts build && node scripts/mv \"build\" \"deployment/static\""
}
编辑/更新:
另一种跨平台解决方案(最初发布此答案时不可用)是利用shx https://github.com/shelljs/shx包,其描述为:
shx
是一个包装器ShellJS https://github.com/shelljs/shelljsUnix 命令,为 npm 包脚本中的简单类 Unix、跨平台命令提供简单的解决方案
-
运行以下命令进行安装shx
:
npm i -D shx
-
然后更改您的构建脚本package.json
如下:
"scripts": {
"build": "shx rm -rf deployment/static & react-scripts build && shx mv build deployment/static"
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)