Автор: Фэн Вэйяо
Гитхаб:tank0317
Мы все знакомы черезnpm run script-name
Может быть выполнен в package.jsonscripts
Скрипт для настройки объекта. Тем не менее, вы можете не знать следующие знания.
Нижеnpm-scirptОтносится к package.json
scripts
Команда сценария, настроенная в .name-scirptОтносится к команде сценария с именем name.
Сценарии жизненного цикла/Пользовательские сценарии
когда мы используем командуnpm start
, npm попытается выполнить package.jsonscripts
Настройте команды сценария запуска. Конфигурация по умолчанию для start-script"start": "node server.js"
. Итак, если в корневом каталоге есть файл server.js, тоnpm start
Будет запускать код в server.js напрямую.
За исключением start-script , при использованииnpm start
команда, npm также попытается включить в package.jsonscripts
Выясните, настроены ли команды предстартового и постстартового сценариев. Если настроены оба, npm выполнит сценарии в следующем порядке.
- npm run prestart
- npm run start
- npm run poststart
похожий,npm test
, npm restart
, npm stop
Соответствующие скрипты, настроенные в скриптах, будут выполняться вышеописанным образом. При этом npm пройдетnpm_lifecycle_eventПеременные среды определяют, в какой фазе (так называемом жизненном цикле) находится в данный момент. Например, на этапе выполнения скрипта перед запуском значением npm_lifecycle_event является «prestart», а на этапе запуска скрипта — «start», то есть package.json.scripts
Имя скрипта конфигурации объекта.
Выше приведена логика выполнения скрипта, соответствующая встроенной команде npm, которая нам наиболее знакома.пользовательский скрипт, действует та же логика. Например, мы настраиваем"build": "webpack --mode=production"
, при настройкеprebuildтак же какpostbuildСценарий, когдаnpm run build
, prebuild-script, build-script и post-build-script также будут выполняться последовательно.
произвольный сценарий
Мы настраиваем команды скрипта, такие как"start": "node server.js"
,node server.js
Он будет передан в виде строки кода в SHELL системы для интерпретации и выполнения.Фактическая используемая оболочка SHELL может различаться в зависимости от системной платформы.В UNIX-подобных системах, таких как macOS или Linux, это относится к /bin/sh, а в Windows — к cmd.exe.
Поскольку он передается в SHELL для интерпретации и выполнения, это означает, что сконфигурированный сценарий может быть любой командой, которую можно запустить в SHELL, а не только сценариями узлов или программами js. То есть, если у вас в системе установлен python (или команду python можно найти в системной переменной PATH), вы также можете настроить скрипты как"myscript": "python xxx.py"
переменная среды
упоминалось выше с использованиемnpm run script-name
Команда npm устанавливает переменную среды npm_lifecycle_event.На самом деле, npm также устанавливает множество переменных среды с помощью встроенных команд.npm run env
Вы можете просмотреть все переменные среды, установленные npm для среды выполнения скрипта.Все поля, установленные в package.json, будут установлены наnpm_package_Начало переменных среды. Если вы установите следующий пакет.
{
"name": "npm-demo",
"version": "1.0.0",
"script": {
"build": "webpack --mode=production"
},
"files": ["src"]
}
Затем вы можете получить npm_package_name, npm_package_version, npm_package_script_build, npm_package_files_0 и другие переменные. Обратите внимание, что каждое поле в объекте и массиве в package.json выше будет иметь соответствующие переменные среды.
Не только package.json, но и все конфигурации, связанные с npm.npm_config_переменные окружения в начале.
Кроме того, важно отметить, что даже если вы используете команду npm run в подкаталоге, скрипт будет выполняться в корневом каталоге проекта. Если вы хотите определить, где используется команда запуска npm, вы можете использовать переменную среды INIT_CWD, которая содержит абсолютный путь к каталогу, в котором была запущена команда запуска npm.
Как использовать эти переменные среды? Если ваш сценарий представляет собой сценарий оболочки, вы можете получить значение переменной непосредственно через соответствующее имя переменной среды.Если это сценарий узла, вы можете использовать глобальную переменную в nodejsprocess.env
Get, например, чтобы получить номер версии проекта, вы можете использоватьprocess.env.npm_package_version
.
PATH
Как упоминалось выше, перед выполнением npm-скрипта будут установлены некоторые переменные среды, одна из самых важных переменных среды — PATH. npm поместит проектnode_modules/.bin
Добавьте абсолютный путь к переменной окружения PATH. Таким образом, мы можем использовать некоторые инструменты командной строки, установленные локально в проекте в npm-скрипте. Сценарий сборки, как указано выше:"build": "webpack --mode=production"
.
Пока у нас локально установлен webpack, мы можемnode_modules/.bin
См. исполняемый файл веб-пакета в пути. и потому, чтоnode_modules/.bin
Путь был добавлен в PATH, поэтому при запуске сценария он сможет найти команду webpack в PATH и без проблем выполнить ее.
Наконец, почему веб-пакет можно установить вnode_modules/.bin
Найти соответствующий исполняемый файл в пути? может просматриватьдокументы The Horse Plus.com/files/crackka…
Reference
docs.thathorseplus.com/handle/run-sichuan…