在windows上配置package.json

时间:2018-06-05 09:40:11

标签: reactjs npm package.json yarnpkg npm-scripts

我试图在Windows上管理反应项目的配置,它以前是在mac上运行的。我正在使用yarn buildpackage.json scripts>build内部已配置为"rm-rf deployment/static;react-scripts build && mv build deployment/static"。由于rm-rfmv命令适用于Linux,我尝试使用rmdir/delmove代替..但它似乎不起作用。我收到了错误:Parameter format not correct - "static"

3 个答案:

答案 0 :(得分:2)

Windows解决方案(cmd.exe)

在Windows上通过命令提示符 PowerShell 运行的build脚本的等价物是:

"scripts": {
  "build": "rd /s/q \"deployment/static\" 2> nul & react-scripts build && md \"deployment/static\" && move \"build\" \"deployment/static\""
}

<强>解释

  1. Windows的rm-rf等效项(cmd.exe)为rd /s/q
  2. Windows的mv等效项(cmd.exe)为move
  3. 所有目录路径都已包含在转义双引号\"...\"中。例如;

    deployment/static已被重写为\"deployment/static\"

    虽然在这种情况下并不完全需要转义双引号,但在路径可能包含空格或标点符号时,必须执行此操作。

  4. 分号;已替换为单个&运算符,以确保react-script build部分运行,无论初始rd /s/q ...命令是否失败或成功。

  5. 使用rd删除可能不存在的文件夹/路径时,将在控制台上打印以下错误消息:

      

    系统无法找到指定的路径

    为防止此错误消息可能会被打印到控制台,我们会使用2> nul部分将错误消息重定向至NUL

  6. md \"deployment/static\"部分使用Windows md命令创建static目录 - 这与bash中的mkdir命令非常相似。
  7. 注意:上述语法将在基于 nix 的操作系统(如macOS和Linux)上失败。

    跨平台解决方案(Windows / Linux / macOS ...)

    为了实现跨平台解决方案(即在Windows,Linux和macOS上成功运行的解决方案),我建议编写两个Nodejs实用程序脚本来替换rm -rfmv bash命令。然后可以通过npm脚本调用这两个Nodejs脚本。

    以下步骤描述了如何实现这一目标。

    1. 安装shelljs,为Nodejs提供可移植的Unix shell命令。为此,cd到项目目录中运行以下命令:

      npm i -D shelljs
      
    2. 使用以下内容创建名为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的级别相同。

    3. 使用以下内容创建另一个名为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的级别相同。

    4. 然后在build中配置您的package.json脚本,如下所示:

      "scripts": {
        "build": "node rm \"deployment/static\" & react-scripts build && node mv \"build\" \"deployment/static\""
      }
      
    5. 注意

      通过阅读部分,在名为rm.js的{​​{1}}中调用两个实用程序脚本mv.jsnpm-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