将 package.json 脚本从 mac 更改为 windows
change package.json script from mac to windows
我有一个基于MAC的项目,package.json脚本如下:
"scripts": {
"copyindex": "cp src/index.html build",
"copycss": "cp src/cds.css build",
"copyimages": "cp src/assets/images/** build/assets/images",
"copyfonts": "cp src/fonts/** build/fonts",
"copywc": "cp -r node_modules/@webcomponents/webcomponentsjs/bundles build && cp node_modules/@webcomponents/webcomponentsjs/webcomponents-loader.js build",
"build": "rm -rf build && mkdir build && npm run copyindex && npm run copycss && mkdir build/assets && mkdir build/assets/images && npm run copyimages && mkdir build/fonts && npm run copyfonts && npm run copywc && rollup -c",
"start": "serve build"
},
当 运行 npm start 时 运行 在 MAC 上正常运行。我正在使用 windows 但它不 运行 我的电脑。我将大部分命令更改为 windows 命令,如下所示。但是,它仍然不起作用。还有什么我需要做的吗?
我收到错误,因为无法识别命令。
Error: 'rm' is not recognized as an internal or external command,
operable program or batch file.
"scripts": {
"copyindex": "copy src/index.html build",
"copycss": "copy src/cds.css build",
"copyfonts": "copy src/fonts/** build/fonts",
"copywc": "copy -r node_modules/@webcomponents/webcomponentsjs/bundles build && copy node_modules/@webcomponents/webcomponentsjs/webcomponents-loader.js build",
"build": "rm -rf || rmdir /s build && mkdir build && npm run copyindex && npm run copycss && mkdir build/fonts && npm run copyfonts && npm run copywc && rollup -c",
"start": "serve build"
},
我不想删除 MAC 命令。我希望 npm 脚本在 windows 和 MAC
中工作
挑战在于脚本需要能够在 Mac 或 Windows 上工作,但不知道它在前面是哪一个。由于 cmd.exe
、the default shell used by npm run
under windows 中的脚本似乎非常有限,并且 cmd.exe
和 /bin/sh
(Mac 下的默认语言)所理解的语言的交叉点似乎几乎是空的,我认为您最好的选择是直接进入 node
编写脚本。这是一个如何工作的例子:
{
...
"build_win32": "rmdir /s && build && ...",
"build_darwin": "rm -rf && build && ...",
"build": "node -e \"child_process.exec(`npm run build_${os.platform()}`)\""
}
最简单的实现方式可能是使用 shx,它可以在任何平台上 运行 Unix 命令。
"scripts": {
"copyindex": "shx cp src/index.html build"
// ...
},
"devDependencies": {
"shx": "latest"
}
或者,您也可以安装提供单个命令的单独软件包,例如 copyfiles for cp
, rimraf for rm -rf
等。它们有很多。
另一种方法是直接在 Javascript 中编写这些脚本,然后 运行 使用 Node.js 编写这些脚本。当您的脚本变得很长时,这可以说是一个更好的解决方案。它也不需要你依赖任何额外的包来 运行 你的脚本。
copyindex
示例:
#!/usr/bin/env node
const fs = require("fs")
fs.copyFileSync("src/index.html", "build/index.html")
在你的package.json中:
"scripts": {
"copyindex": "node scripts/copyindex.js",
// ...
}
我有一个基于MAC的项目,package.json脚本如下:
"scripts": {
"copyindex": "cp src/index.html build",
"copycss": "cp src/cds.css build",
"copyimages": "cp src/assets/images/** build/assets/images",
"copyfonts": "cp src/fonts/** build/fonts",
"copywc": "cp -r node_modules/@webcomponents/webcomponentsjs/bundles build && cp node_modules/@webcomponents/webcomponentsjs/webcomponents-loader.js build",
"build": "rm -rf build && mkdir build && npm run copyindex && npm run copycss && mkdir build/assets && mkdir build/assets/images && npm run copyimages && mkdir build/fonts && npm run copyfonts && npm run copywc && rollup -c",
"start": "serve build"
},
当 运行 npm start 时 运行 在 MAC 上正常运行。我正在使用 windows 但它不 运行 我的电脑。我将大部分命令更改为 windows 命令,如下所示。但是,它仍然不起作用。还有什么我需要做的吗? 我收到错误,因为无法识别命令。
Error: 'rm' is not recognized as an internal or external command,
operable program or batch file.
"scripts": {
"copyindex": "copy src/index.html build",
"copycss": "copy src/cds.css build",
"copyfonts": "copy src/fonts/** build/fonts",
"copywc": "copy -r node_modules/@webcomponents/webcomponentsjs/bundles build && copy node_modules/@webcomponents/webcomponentsjs/webcomponents-loader.js build",
"build": "rm -rf || rmdir /s build && mkdir build && npm run copyindex && npm run copycss && mkdir build/fonts && npm run copyfonts && npm run copywc && rollup -c",
"start": "serve build"
},
我不想删除 MAC 命令。我希望 npm 脚本在 windows 和 MAC
中工作挑战在于脚本需要能够在 Mac 或 Windows 上工作,但不知道它在前面是哪一个。由于 cmd.exe
、the default shell used by npm run
under windows 中的脚本似乎非常有限,并且 cmd.exe
和 /bin/sh
(Mac 下的默认语言)所理解的语言的交叉点似乎几乎是空的,我认为您最好的选择是直接进入 node
编写脚本。这是一个如何工作的例子:
{
...
"build_win32": "rmdir /s && build && ...",
"build_darwin": "rm -rf && build && ...",
"build": "node -e \"child_process.exec(`npm run build_${os.platform()}`)\""
}
最简单的实现方式可能是使用 shx,它可以在任何平台上 运行 Unix 命令。
"scripts": {
"copyindex": "shx cp src/index.html build"
// ...
},
"devDependencies": {
"shx": "latest"
}
或者,您也可以安装提供单个命令的单独软件包,例如 copyfiles for cp
, rimraf for rm -rf
等。它们有很多。
另一种方法是直接在 Javascript 中编写这些脚本,然后 运行 使用 Node.js 编写这些脚本。当您的脚本变得很长时,这可以说是一个更好的解决方案。它也不需要你依赖任何额外的包来 运行 你的脚本。
copyindex
示例:
#!/usr/bin/env node
const fs = require("fs")
fs.copyFileSync("src/index.html", "build/index.html")
在你的package.json中:
"scripts": {
"copyindex": "node scripts/copyindex.js",
// ...
}