我正在运行yarn run build,这将重新创建我的项目的目录构建。问题是:每当完成此操作时,我都会丢失build/中必须包含的一个文件,我手动将其复制并粘贴到那里。
因此,很自然地,我在package.json中创建了以下脚本,以便自动完成:
"scripts": {
"build": "react-scripts build",
"postbuild": "npm run copy",
"copy": "copy Staticfile build"
},
Run Code Online (Sandbox Code Playgroud)
现在的问题是:它能在 Mac 上运行吗?Linux?我只有 Windows,所以我不知道也无法测试,但我认为它不起作用,因为copy语句在 Windows 上是本机的,但在其他操作系统上却不是......
那么问题是:如何使其通用且独立于操作系统?
谢谢你!
Rob*_*obC 17
“我认为它不起作用,因为
copy该语句在 Windows 上是本机的,但在其他操作系统上则不然”
是的,你的假设是正确的。
在类 UNIX 平台(Linux、macOS 等)上,该cp命令类似于copyWindows 上的命令。
为了跨平台兼容性,请考虑使用以下两种解决方案之一 - 两者本质上都使用 node.js 来复制文件(我个人会选择“解决方案 A”)。
解决方案A:使用第三方包
使用shx描述如下的包:
“是ShellJS
shxUnix 命令的包装器,为 npm 包脚本中的简单类 Unix、跨平台命令提供简单的解决方案。”
首先cd到您的项目目录并运行以下命令来安装它:
npm i -D shx
Run Code Online (Sandbox Code Playgroud)
然后在package.jsoncopy的脚本部分中重新定义脚本,如下所示:
"scripts": {
...
"copy": "shx cp Staticfile build"
}
Run Code Online (Sandbox Code Playgroud)
注意:还有其他软件包也可以满足您的跨平台要求,例如;复制文件。
解决方案 B:使用内置的 Node.js
或者,如果您想避免向项目添加更多依赖项,您可以考虑使用node.js内置fs模块。例如,以下脚本使用fs.readFileSync()和fs.writeFileSync()方法。
"scripts": {
...
"copy": "node -e \"const fs = require('fs'); const data = fs.readFileSync('Staticfile'); fs.writeFileSync('build/Staticfile', data);\""
}
Run Code Online (Sandbox Code Playgroud)
此copy脚本(上图)利用 node.js 命令行选项-e来评估内联 JavaScript,如下所示:
const fs = require('fs');
const data = fs.readFileSync('Staticfile');
fs.writeFileSync('build/Staticfile', data);
Run Code Online (Sandbox Code Playgroud)
注意:如果您想采用与前面的示例类似的方法,即在 npm 脚本内执行自定义 node.js,您可能应该考虑使用该fs.copyFile()方法。我刚刚提供了一个使用fs.readFileSync()和 的示例fs.writeFileSync(),因为我知道这些方法适用于 Node.js 上的早期版本 - 与fs.copyFile()需要 Node.js不同>=8.5.0
| 归档时间: |
|
| 查看次数: |
7939 次 |
| 最近记录: |