`npm build` не запускает скрипт с именем“ build ”в package.json


138

Для нового модуля я пытаюсь использовать npm buildбез gulp / Grunt / других специализированных инструментов сборки.

"scripts": {
  "build": "node build.js"
},

Мой build.js просто

console.log('Hello')

Тем не менее, работает

npm build

Просто выходит, ничего не печатая, со статусом 0.

Бег:

npm install

Также делает все обычные вещи, но не запускает build.js.

Как я могу заставить npm запускать мой скрипт сборки?

Редактировать: даже простые команды bash не работают, например

"scripts": {
    "build": "touch TESTFILE"
},

Не создает файл с таким именем.


Обходной путь: используйте installвместо этого.
Заз

Это в основном огромное и не интуитивное раздражение от NPM и одна из причин, по которой я продолжаю использовать пряжу. С помощью пряжи я могу запустить любой собственный сценарий в качестве параметра, т. Е. В сборнике рассказов будет работать сценарий сборника рассказов. В NPM я должен сделать npm run storybook и, кроме того, если я хочу передать какие-либо параметры через npm, он требует - перед этим, поэтому при сравнении yarn storybook --ci с npm run storybook - --ci, это легко для меня.
Эмоб

Ответы:


243

К сожалению, npm buildэто уже внутренняя команда, как описано в документации :

Это сантехническая команда, которая вызывается с помощью npm link и npm install. Как правило, не следует вызывать напрямую.

Поскольку эта команда уже существует, она всегда скрывает вашу "build": "node build.js".

Полностью квалифицированный способ запуска собственного сценария - с помощью run-scriptили его псевдонимаrun :

$ npm run build

npm startи другие являются кратким способом, но это вариант, только когда существующая команда npm не затеняет ее, как npm buildделает.


Для потомков (как уже упоминалось) npm buildnpm используется для создания собственных аддонов C / C ++ Node с использованием node-gyp . Это плохо документировано, потому что обычно это происходит автоматически, но если вам интересно, исходный код здесь .


15
Так что же npm build делать? Насколько я вижу, он оставляет все файлы полностью без изменений ...
Qntm

2
Некоторые пакеты требуют процесса сборки. Когда вы работаете, npm installи npm находит пакет с привязками C / C ++ или вообще с sth, для запуска которого требуется node-gyp, он запускается npm build. Вы можете перестроить эти пакеты, просто запустив их в npm buildодиночку.
Якуб Мизиолек

4
внутренняя команда должна быть переименована _buildи npm buildдолжна быть как ярлык, npm startиnpm test
Pawel

1
Я понимаю, что npm buildэто не вызовет мой скрипт, и что он используется для сборки скомпилированных компонентов пакета. Я до сих пор не уверен, как это происходит: какие файлы он ищет и т.д.?
Аайдан

1
Если бы я сам должен был написать пакет, было бы неплохо узнать, что делать, чтобы наполнить npm buildсмыслом ...
Фрэнк

20

Сценарий, называемый «build», package.jsonне является чем-то особенным. Единственный способ запустить его - позвонить:

npm run-script build

Есть некоторые имена, которые автоматически называются npm , но «build» не является одним из них. Полный список:

  • prepublish, publish,postpublish
  • preinstall, install,postinstall
  • preuninstall, uninstall,postuninstall
  • preversion, version,postversion
  • pretest, test,posttest
  • prestop, stop,poststop
  • prestart, start,poststart
  • prerestart, restart,postrestart
  • preCUSTOMи postCUSTOMдля пользовательских имен сценариев.

4

Хорошо, чтобы запустить сборку самостоятельно, используйте:

npm run-script build

3

У меня была проблема с npm run buildотсутствием печати. в конечном итоге использовать, npm run build --verboseчтобы получить результат, который мне нужен.


2

Npm build ожидает

Папка, содержащая файл package.json в его корне

Попробуйте использовать скрипты npm в вашем package.json, как классический запуск npm


Это означает, что это npm build .должно работать, и в моем случае npm выполняет сценарий «build» в моем «package.json», как я и надеялся.
Erhhung
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.