在 Windows 上配置 package.json

2023-12-22

我正在尝试在 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\""
}

解释:

  1. The rm-rfWindows 的等效项 (cmd.exe) 是rd /s/q https://ss64.com/nt/rd.html
  2. The mvWindows 的等效项 (cmd.exe) 是move https://ss64.com/nt/move.html
  3. 所有目录路径都已用转义双引号引起来\"...\"。例如;

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

    尽管在这种情况下,转义双引号并不是完全必要的,但当路径可能包含空格或标点符号时,这样做是一种很好的做法,并且有必要这样做。

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

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

    该系统找不到指定的路径

    为了防止此错误消息可能被打印到控制台,我们将错误消息重定向到NUL使用2> nul https://support.microsoft.com/en-us/help/110930/redirecting-error-messages-from-command-prompt-stderr-stdout part.

  6. The md \"deployment/static\"部分利用Windowsmd https://ss64.com/nt/md.html命令使static目录 - 这与mkdirbash 中的命令。

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 脚本。

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

  1. Install shelljs https://github.com/shelljs/shelljs它为 Nodejs 提供可移植的 Unix shell 命令。去做这个,cd到您的项目目录并运行以下命令:

    npm i -D shelljs
    
  2. 创建一个名为的新 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被储存了。

  3. 创建另一个名为的 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被储存了。

  4. 然后配置你的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、跨平台命令提供简单的解决方案

  1. 运行以下命令进行安装shx:

    npm i -D shx
    
  2. 然后更改您的构建脚本package.json如下:

    "scripts": {
      "build": "shx rm -rf deployment/static & react-scripts build && shx mv build deployment/static"
    }
    

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Windows 上配置 package.json 的相关文章

随机推荐

  • WPF 方向

    我正在纵向平板电脑上开发一个应用程序 然而 当平板电脑转向横向模式时 应用程序也会转动 并且所有对齐方式都会被打乱 那么有什么方法可以将我的 WPF 应用程序锁定到单一方向吗 谢谢你 我必须同意Martin https stackoverf
  • 如何在代码的另一部分中使用类中的枚举值?

    我在当地一所大学的夜间课程中获得了 C 背景 现在我已经开始了 C 之路 适应语法很痛苦 在编码技术方面我也还很陌生 From my WinMain函数 我希望能够访问使用我在另一个类中声明的枚举的变量 inside core h clas
  • Crystal Reports 检查字符串是否包含任何数值

    我正在使用 Crystal Reports 在我的公式 1 中 我想检查字符串是否包含任何数值 示例如下所示 Chris 12 Returns True 123 Returns True Pot Returns False John0 Re
  • ggsave 不限制线宽

    我有下面的例子 library ggplot2 library ggthemes ggplot mtcars geom point aes x wt y mpg colour factor gear facet wrap am ggtitl
  • 托管和非托管应用内产品 android 之间的区别?

    我通过开发者论坛了解了托管和非托管应用内产品之间的区别 他们说 非托管商品的交易信息不会存储在 Android Market 上 这意味着您无法查询 Android Market 来检索购买类型列为非托管商品的交易信息 您负责管理这些商品的
  • 如何使用Eclipse在Android上调试C++代码?

    我写了一些视频流媒体 C 在 PC 上 现在我尝试在 Android 上实现相同的跨平台部分 我 玩 够了NDK并了解一些如何编译和集成C使用 Android 又名 JNI 编写代码 问题是 有时我的应用程序会崩溃 并且如您所知 Andro
  • Heroku - 在浏览器中显示当前提交的哈希值

    我想在浏览器中显示当前 git 提交的哈希值 以便测试团队 无权运行 heruko 命令 能够在错误报告中包含相应的提交哈希值 首先我尝试了 grit 但是有些东西坏了 它在 Heroku 上不起作用 在本地它工作得很好 我不知道为什么它在
  • 在 JFrame 中绘制 Graphics2D

    我正在制作一个 2d 垂直射击游戏 其中除了图形之外的所有内容都已编码 并且可以工作 我以前没有使用过 Graphics 类 所以这对我来说是全新的 以下是我用来将所有内容绘制到 JFrame 的代码 public void paintAl
  • C 中的滚动中位数 - Turlach 实现

    有谁知道 C 语言中是否有 Turlach 滚动中值算法的干净实现 我在将 R 版本移植到干净的 C 版本时遇到问题 看here https stackoverflow com questions 1309263 rolling media
  • 如何在四边形中找到随机点?

    我必须能够为飞行模拟的航路点设置随机位置 数学挑战很简单 在四边形内找到一个随机位置 该点位于任何位置的机会均等 视觉上是这样的 ABCD 四边形示例如下 答 21417 78 37105 97 乙 38197 32 24009 74 C
  • 如何使用 python matplotlib 中的 set_position 方法固定轴位置?

    我认为这很容易 但我搜索了互联网和 matplotlib 用户邮件列表 但无法找到答案 ax2 是图 fig 中 ax 轴内的插入轴 我通过以下方式制作 http matplotlib sourceforge net examples py
  • 上述查询中表空间的用途是什么?

    CREATE TABLE ts pcode tb incase TABLESPACE USERS AS SELECT FROM ts pcode tb 上述查询中表空间的用途是什么 表空间是数据库中数据文件的逻辑组 数据库通常包含至少一个表
  • Dart 使用 RegExp 从 String 中获取轨迹元素

    当我从我们的网站 url 检索数据时 会在其余 api 字段之一中返回此输出 并且我尝试查找是否tracks包含我从下面的内容中获取网址tracks来源是我需要得到 String test div class n div class div
  • symfony assetic 在请求文件时给出 500 错误

    EDITED 我正在使用 assetic 和 symfony2 每次我尝试加载页面时 在请求 JS 和 CSS 文件时 我的浏览器都会收到 500 错误 如果我在地址栏中输入该资源的地址 我就可以成功加载其文件 更奇怪的是 每当 Symfo
  • 如何配置用户上下文/表?

    随着新的 ASP NET MVC 5 预览版发布 如何配置用户上下文 表 在 MVC 4 中 我只使用我自己的 User 类 然后将 WebSecurity 初始化指向它 如下所示 WebSecurity InitializeDatabas
  • Fortran编译器

    我正在 Mac 上开发 Android 应用程序 有谁知道android 的fortran 编译器吗 我打算从 C 例程调用一些 Fortran 例程 然后用 java 类包装 C 例程并使用 JNI 来执行此操作 但是 我无法编译 For
  • 将 lambda 表达式应用于数组元素时出现 ValueError

    目前我在处理 numpy array 4x1 即时遇到错误 1 96113883 3 46144244 5 075857 1 77550086 使用 lambda 函数f lambda x x if x gt 0 else x 0 01 错
  • 通过 C# 代码更改货币

    我使用以下内容来显示金额 String Format 0 C item Amount 这个显示器 9 99 没关系 但是如果我希望应用程序能够控制货币并能够更改货币 该怎么办 9 99 如何通过代码更改货币格式 货币符号由 CultureI
  • haskell 检查用户输入错误

    我在 haskell 中编写应用程序 我想知道这是检查用户输入是否正确的最佳方法 例如当我要求 int 时它是 int 还是当要求格式良好的日期时它是日期 感谢帮助 Use maybeRead 该函数是一个候选函数 包含在 Haskell
  • 在 Windows 上配置 package.json

    我正在尝试在 Windows 上管理 React 项目的配置 它之前在 Mac 上运行 我在用着yarn build 在 的里面package json scripts gt build被配置为 rm rf deployment stati