Ниже приведено несколько решений для успешного удовлетворения ваших требований:
Решение A
Как отмечено в ответе @ vitorlui , параметр обратного вызова обязателен при использованиивстроенная в nodejs fs.rename () .
Кроме того, при использовании команды node -e
через скрипт npm необходимо обернуть скрипт для вычисления в JSON экранированных двойных кавычек,т.е. \"...\"
.
Например, настройте раздел scripts
вашего package.json следующим образом:
"scripts": {
"rename": "node -e \"require('fs').rename('dist/config/conf.dev.json', 'dist/config/conf.json', function(err) { if (err) console.log(err); console.log('File successfully renamed!') })\"",
"copy": "copyfiles -u 2 \"src/app/conf.dev.json\" \"dist/config/\"",
"copy-and-rename": "npm run copy && npm run rename"
},
Затем выполните следующую команду npm:
npm run copy-and-rename
При успешном завершении вы должны увидеть следующие записи в консоли после того, как файл скопирован и переименован:
File successfully renamed!
Решение B
Вы также можете рассмотреть вопрос об установке и использовании renamer для переименования файла.Это может быть полезно, если ваши требования к переименованию становятся более сложными, чем пример, приведенный в вашем вопросе, или если вы хотите что-то менее подробное, чем Решение A .
Установите и проверьте, какая версия:
cd
, в каталог проекта и установите renamer
, выполнив следующую команду:
npm i -D renamer
Затем выполните следующую команду, чтобы проверить, какая версия renamer
была установлена.
npm ls renamer
Примечание: Причина, по которой я прошу вас проверить, какая версия была установлена, заключается в том, что это определит, какую из следующих renamer
команд вы должны использовать.Он немного отличается, если установлена версия <0.7.0 или> = 0.7.0:
Если установлена версия Renamer <0.7.0 </h3> Установите для секции scripts
вашего package.json следующее: "scripts": {
"rename": "renamer --dry-run -f --regex \"^conf.dev.json$\" -r \"conf.json\" \"dist/config/*\"",
"copy": "copyfiles -u 2 \"src/app/conf.dev.json\" \"dist/config/\"",
"copy-and-rename": "npm run copy && npm run rename"
},
Затем выполните следующую команду npm
: npm run copy-and-rename
Вы должны увидеть в консоли что-то вроде следующего: √ dist\config\conf.dev.json -> dist\config\conf.json
, чтобы указать, какиепуть был изменен. Вы также заметите, что фактическое имя файла скопированного файла не изменилось, потому что мы включили опцию --dry-run
.Просто пропустите параметр --dry-run
в вашем скрипте и снова введите команду для фактического имени файла, который нужно изменить. Если установлена версия renamer> = 0.7.0
Начиная с v0.7.0 произошли серьезные изменения, которые включали удаление опции --regex
(см. здесь для дальнейшей информации) .Вместо этой версии теперь предоставляется литерал регулярного выражения.
Это изменение API приводит к скрипту rename
(как показано выше), который необходимо переопределить следующим образом:
"rename": "renamer -f \"/^conf.dev.json$/\" -r \"conf.json\" \"dist/config/*\"",
^ ^
Примечание: Опция --regex
была опущена, и регулярное выражение теперь является литералом, то есть теперь оно заключено в начальную и конечную косую черту.Кроме того, в этом примере опция --dry-run
была удалена, поэтому восстановите ее для целей тестирования.
Дополнительные примечания
Для обоих Решение A и Решение B , логика копирования и переименования была добавлена в отдельные сценарии npm (а именно copy
и rename
соответственно) для ясности объяснения.Однако вы можете объединить две команды, используя оператор &&
, чтобы сформировать один скрипт npm - хотя одна строка будет довольно длинной:)
Для Решение B , Я часто использую версию 0.6.1
из renamer
, поэтому я бегу;npm i -D renamer@0.6.1
для установки, так как я обычно поддерживаю более старые версии nodejs.В этом случае я использую флаг --regex
в соответствии с примером, показанным в вышеупомянутом подразделе, озаглавленном: "Если установлена версия renamer <0.7.0" </em>.