настройка package.json на windows - PullRequest
0 голосов
/ 05 июня 2018

Я пытаюсь управлять конфигурацией реактивного проекта на Windows, он ранее работал на Mac.Я использую yarn build.внутри package.json scripts>build был настроен как "rm-rf deployment/static;react-scripts build && mv build deployment/static".поскольку команды rm-rf и mv предназначены для Linux, я попытался использовать вместо них rmdir/del и move, но, похоже, это не работает.Я получаю сообщение об ошибке: Parameter format not correct - "static".

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Windows Solution (cmd.exe)

Эквивалент этого build сценария, запущенного с помощью Командная строка или PowerShell в Windows:

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

Объяснение:

  1. Эквивалент rm-rf для Windows (cmd.exe) составляет rd /s/q
  2. mv эквивалент для Windows (cmd.exe) равен move
  3. Все пути к каталогам заключены в экранированные двойные кавычки \"...\".Например,

    deployment/static было переписано как \"deployment/static\".

    Хотя экранированные двойные кавычки не являются полностью необходимыми в этом сценарии, это хорошая практика и необходимо делать это, когда пути могут включатьпробелы или знаки пунктуации.

  4. Точка с запятой ; заменена одним оператором &, чтобы обеспечить выполнение части react-script build независимо от того, является ли начальный rd /s/q ...Сбой или успех команды.

  5. При использовании rd для удаления папки / пути, которые могут не существовать, на консоль выводится следующее сообщение об ошибке:

    Системе не удается найти указанный путь

    Чтобы предотвратить потенциальную печать этого сообщения об ошибке на консоли, мы перенаправляем сообщение об ошибке на NUL, используя 2> nulpart.

  6. Часть md \"deployment/static\" использует команду Windows md для создания каталога static, что очень похоже на команду mkdir в bash.

Примечание: Приведенный выше синтаксис не будет работать в операционных системах nix , таких как macOS и Linux.


Кроссплатформенное решение (Windows / Linux /macOS ...)

Чтобы создать кроссплатформенное решение (то есть то, которое успешно работает в Windows, Linux и macOS), я предлагаю написать два служебных скрипта Nodejs вместо rm -rf и mv команды bash.Эти два сценария Nodejs могут затем вызываться с помощью вашего npm-сценария.

Следующие шаги описывают, как этого можно достичь.

  1. Установка shelljs который предоставляет переносимые команды оболочки Unix для Nodejs.Для этого 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\""
    }
    

Примечание

Два служебных скрипта rm.js и mv.js вызываются в npm-script с именем build через частичтение;node rm ... и node mv ... соответственно.

Если вы решите сохранить эти два сценария в другой папке, а не в корневом каталоге проектов (как было предложено ранее в шагах 2 и 3), вам потребуетсяизменить пути к файлам.Например;если они оба были сохранены в папке с именем scripts, которая находится в корневом каталоге вашего проекта, сценарий build изменится на:

"scripts": {
  "build": "node scripts/rm \"deployment/static\" & react-scripts build && node scripts/mv \"build\" \"deployment/static\""
}
0 голосов
/ 05 июня 2018

Я использую rimraf именно по этой причине.Установите его глобально

    npm i -g rimraf

и обновите ваш скрипт следующим образом

    "rimraf deployment/static;react-scripts build && mv build deployment/static"
...