В чем разница между npm install и npm run build?
В чем разница между npm install
и npm run build
?
В моем проекте я заметил, что иногда при запуске npm начинается сбой npm install
, но при запуске npm run build
он работает просто отлично.
Чем отличается внутренняя работа этих двух целей, а именно install
и run build
?
Ответы
Ответ 1
npm install
устанавливает зависимости в каталог node_modules/
для проекта node, над которым вы работаете. Вы можете вызвать install
в другом проекте node.js(module), чтобы установить его как зависимость для вашего проекта.
npm run build
является псевдонимом для npm build
, и он ничего не делает, если вы не укажете, что делает "build" в вашем файле package.json. Он позволяет выполнять любые необходимые строительные/подготовительные задачи для вашего проекта, прежде чем он будет использоваться в другом проекте.
build
вызывается командами link
и install
, в соответствии с документацией для сборки:
Это команда сантехника, вызванная связью npm и установкой npm.
Ответ 2
Основное отличие заключается в ::
npm install - это команда npm cli, которая выполняет предопределенную задачу, т.е., как написано Churro, для установки зависимостей, указанных внутри package.json
npm run имя-команды или npm run-script имя-команды (ex. npm run build) также является предварительно заданной командой cli для запуска пользовательских сценариев с именем указано вместо "имя команды". Итак, в этом случае npm run build является Пользовательский скрипт команды с именем "build" и сделает все что угодно указано внутри него (например, echo 'hello world', приведенный в примере ниже package.json).
Понить на заметку ::
1) Еще одна вещь, npm build
и npm run build
- это две разные вещи, которые npm build
будет делать так, как написано Churro, но npm run build
будет выполнять пользовательскую работу, написанную внутри package.json
2) И npm build
, и npm run build
не совпадают. Я имею в виду, что вы не можете указать что-то внутри скрипта пользовательской сборки (npm run build
) и ожидать, что npm build
сделает то же самое. Попробуйте сделать следующее, чтобы подтвердить это в package.json
:
{
"name": "demo",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"build":"echo 'hello build'"
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {},
"dependencies": {}
}
и запустите npm run build
и npm build
один за другим, и вы увидите разницу. Для получения дополнительной информации о командах следуйте документации по npm.
Ура !!
Ответ 3
НПМ в 2019 году
npm build
больше не существует. Вы должны позвонить npm run build
сейчас. Более подробная информация ниже.
TLDR;
npm install
: устанавливает зависимости, затем вызывает install
из поля package.json
scripts
.
npm run build
: запускает поле сборки из поля package.json
scripts
.
Поле сценариев NPM
https://docs.npmjs.com/misc/scripts
Есть много вещей, которые вы можете поместить в поле сценариев npm package.json
. Посмотрите ссылку на документацию выше над жизненным циклом сценариев - большинство из них имеют пре- и пост-хуки, позволяющие запускать сценарии до/после установки, публикации, удаления, тестирования, запуска, остановки, сжатия, версии.
Усложнять вещи
npm install
отличается от npm run install
npm install
устанавливает зависимости package.json
, затем запускает package.json
scripts.install
- (По сути, вызывает
npm run install
после установки зависимостей.
npm run install
только запускает package.json
scripts.install
, он не будет устанавливать зависимости.
npm build
раньше была действительной командой (раньше была такой же, как npm run build
), но больше не является; теперь это внутренняя команда. Если вы запустите его, вы получите: npm WARN build npm build called with no arguments. Did you mean to npm run-script build?
Вы можете прочитать больше в документации: https://docs.npmjs.com/cli/build
Ответ 4
-
npm install
устанавливает зависимости в вашем файле package.json. -
npm run build
запускает скрипт "build" и создает скрипт, который запускает ваше приложение - скажем, server.js -
npm start
запускает скрипт "start", который затем будет "node server.js"
Трудно точно сказать, в чем заключалась проблема, но в основном, если вы посмотрите на конфигурацию ваших скриптов, я бы предположил, что "build" использует какой-то инструмент сборки для создания вашего приложения, в то время как "start" предполагает, что сборка выполнена, но затем происходит сбой, если файла там нет
Вероятно, вы используете bower или grunt - я помню, что типичное grunt-приложение определит эти сценарии, а также "чистый" сценарий для удаления последней сборки.
Инструменты сборки, как правило, создают файлы в папке bin/, dist/или build/, которые затем запускает стартовый скрипт, например, "node build/server.js". Когда ваш npm start
завершается неудачно, это возможно потому, что вы вызвали npm clean
или аналогичный, чтобы удалить последнюю сборку, чтобы файл приложения отсутствовал, что вызвало сбой запуска npm.
Исходный код сборки npm - чтобы затронуть обсуждение в этом вопросе - находится на github, чтобы вы могли посмотреть, если хотите. Если вы запускаете npm build
напрямую и у вас определен сценарий "build", он завершится с ошибкой, в которой вас npm run-script build
вызвать ваш скрипт сборки как npm run-script build
так что он не совпадает с npm run script
.
Я не совсем уверен, что делает npm build
, но, похоже, это связано с постинсталляцией и упаковкой скриптов в зависимости. Я предполагаю, что это может быть причиной того, что любые скрипты сборки CLI или собственные библиотеки, необходимые для зависимостей, будут созданы для конкретной среды после загрузки пакета. Вот почему ссылка и установка вызывают этот скрипт.