Переписать скрипт npm для совместимости с windows cmd - PullRequest
1 голос
/ 01 мая 2020

Я пытаюсь запустить скрипт из учебника, который был написан для командной строки linux, но у меня возникают ошибки при преобразовании его во что-то, совместимое с windows. Это строка из статьи:

"build": "cd react-spa && yarn build && cd .. && cp -R react-spa/build/ public/ && mv public/index.html public/app.html"

и вот что у меня есть

cd client && yarn build && cd .. && xcopy client/build/ public/ /E && ren public/index.html app.html

Это сообщение об ошибке, которое я получаю в терминале

Invalid number of parameters
npm ERR! code ELIFECYCLE
npm ERR! errno 4
npm ERR! api@0.0.0 build: `cd client && yarn build && cd .. && xcopy client/build/ public/ /E && ren public/index.html app.html`
npm ERR! Exit status 4
npm ERR!
npm ERR! Failed at the api@0.0.0 build script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\user\AppData\Roaming\npm-cache\_logs\2020-05-01T05_29_54_552Z-debug.log

Что я здесь не так делаю?

1 Ответ

1 голос
/ 01 мая 2020

Переопределите ваш build скрипт в пакете . json следующим образом:

"build": "cd react-spa && yarn build && cd .. && xcopy /e/h/y/q \"react-spa/build\" \"public\\\" > nul 2>&1 && del \"public\\app.html\" > nul 2>&1 && ren \"public\\index.html\" \"app.html\""

Примечание: Вышеупомянутый npm скрипт Предполагается, что вы используете Windows, а для сценариев npm используется оболочка по умолчанию: cmd.exe.


Объяснение:

Следующие изменения были внесены в соответствует тому же поведению, что и оригинальный скрипт npm build (т. е. тот, который написан с использованием команд * nix ):

  1. Следующее cp команда:

    cp -R react-spa/build/ public/
    

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

    xcopy /e/h/y/q \"react-spa/build\" \"public\\\" > nul 2>&1 
    

    Опции:

    • /e - копировать папки и подпапки, включая пустые папки.
    • /h - копировать скрытые и системные файлы и папки.
    • /y - Подавить запрос на подтверждение перезаписи файла.
    • /q - Не отображать имена файлов при копировании.

    Примечания:

    • Каждый путь был заключен в JSON двойные кавычки, т. е. \"...\"

    • Часть public\\ имеет конечную обратную косую черту sh (\), которая была JSON сбежал (\\), чтобы сообщить xcopy, что местом назначения является каталог. Это также гарантирует, что каталог public будет создан, если он еще не существует.

    • Часть > nul 2>&1 подавляет журнал подтверждения, в котором указано, сколько файлов было скопировано.

  2. Следующая команда mv:

    mv public/index.html public/app.html
    

    была усовершенствована для использования обоих del и ren команды следующим образом:

    del \"public\\app.html\" > nul 2>&1 && ren \"public\\index.html\" \"app.html\"
    

    Примечания:

    • Сначала мы пытаемся удалить файл app.html, чтобы гарантировать, что последующая команда ren может переименовать файл index.html в app.html без какого-либо конфликта из-за уже существующего дубликата файла.

      Мы перенаправляем с помощью > nul 2>&1, чтобы гарантировать, что мы запретить ведение журнала, если файл app.html не может быть найден, т. е. не может быть найден во время первого запуска сценария сборки.

    • Каждый путь был заключен в JSON с двойным экранированием кавычки, то есть \"...\".
    • Части public\\index.html в командах del и ren используют разделитель backsla sh (\), который JSON сбежал (\\). вместо форвард слэ sh (/).

...