Как переименовать файл с помощью скрипта npm - PullRequest
0 голосов
/ 30 января 2019

Я использую copyfiles в качестве npm scirpt copyfiles -u 2 /src/app/conf.dev.json dist/config/, но в конце я хочу переименовать файл

Как бы вы переименовали входной файл в что-то вродеconf.json?

Я проверил документы и не нашел, что это можно сделать с помощью copyfiles.Есть какие-нибудь мысли?

ОБНОВЛЕНИЕ : Я слежу за этим Переименовываем файл с помощью NPM , но получаю сообщение об ошибке, когда npm run copy:

"copy": "copyfiles -u 2 /src/app/conf.dev.json dist/config/ && node -e require('fs').rename('dist/config/conf.prod.json','dist/config/conf.json')"

fs.js: 137 throw new ERR_INVALID_CALLBACK ();^

TypeError [ERR_INVALID_CALLBACK]: обратный вызов должен быть функцией

Ответы [ 3 ]

0 голосов
/ 30 января 2019

Вы должны определить функцию обратного вызова:

fs.rename('oldFile.txt', 'newFile.txt', (err) => {
  if (err) throw err;
  console.log('Rename complete!');
});

Примерно так:

"copy": "copyfiles -u 2 /src/app/conf.dev.json dist/config/ && node -e require('fs').rename('dist/config/conf.prod.json','dist/config/conf.json' , (err) => { (err? console.log(err) : console.log('Rename complete!') ) } )"

@ см. https://nodejs.org/api/fs.html#fs_fs_rename_oldpath_newpath_callback

0 голосов
/ 30 января 2019

Ниже приведено несколько решений для успешного удовлетворения ваших требований:

Решение A

Как отмечено в ответе @ vitorlui , параметр обратного вызова обязателен при использованиивстроенная в nodejs fs.rename () .

Кроме того, при использовании команды node -e через скрипт npm необходимо обернуть скрипт для вычисления в JSON экранированных двойных кавычек,т.е. \"...\".

  1. Например, настройте раздел 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"
    },
    
  2. Затем выполните следующую команду npm:

    npm run copy-and-rename
    
  3. При успешном завершении вы должны увидеть следующие записи в консоли после того, как файл скопирован и переименован:

    File successfully renamed!


Решение B

Вы также можете рассмотреть вопрос об установке и использовании renamer для переименования файла.Это может быть полезно, если ваши требования к переименованию становятся более сложными, чем пример, приведенный в вашем вопросе, или если вы хотите что-то менее подробное, чем Решение A .

Установите и проверьте, какая версия:

  1. cd, в каталог проекта и установите renamer, выполнив следующую команду:

    npm i -D renamer
    
  2. Затем выполните следующую команду, чтобы проверить, какая версия 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>.

0 голосов
/ 30 января 2019

Вы можете использовать эту библиотеку.https://www.npmjs.com/package/move-file просто перейдите на "новое имя"

...