Краткий ответ: Нет краткого способа добиться этого, как в вашем втором примере, который ссылается на переменную $npm_package_config
.
Вместо этого вам нужно будет выполнить команду (то есть тот, который в настоящее время определен в вашем npm-скрипте) через вспомогательный скрипт nodejs.По сути, ваш скрипт nodejs должен:
Затем можно запустить вспомогательный сценарий nodejs с помощью сценария npm.
Ниже описано, как создать решение, работающее на кроссплатформенном уровне.
Решение
1.Файл .env
Во-первых, давайте предположим, что у нас есть файл .env , находящийся в корневом каталоге нашего проекта.Файл .env
содержит следующую запись:
DOMAIN=https://tld.com
2.Установите
Следующий скрипт nodejs использует пакет dotenv для загрузки переменных среды из файла .env .Нам нужно будет установить его.Для этого cd
перейдите в каталог вашего проекта и выполните следующую команду:
npm i -D dotenv
3.Сценарий Node.js ( some-lib-cmd.js )
Затем создайте сценарий nodejs следующим образом.Давайте назовем файл some-lib-cmd.js и сохраним его в корне каталога проекта:
// Requirements...
require('dotenv').config();
const execSync = require('child_process').execSync;
const path = require("path");
/**
* Creates a path to an executable in the node_modules/.bin directory. Each
* path segment is joined with the appropriate platform-specific separator as
* a delimiter.
* @param {String} cmd The name of the executable.
* @returns {String} The path to the executable.
*/
function getBinFile(cmd) {
return path.join('node_modules', '.bin', cmd);
}
// Execute the command...
execSync(`${getBinFile('some-lib')} --argument --domain ${process.env.DOMAIN}`, { stdio: [0, 1, 2] });
Примечания:
Если ваш файл .env не находится в корне каталога нашего проекта вместе с some-lib-cmd.js ,тогда вы можете использовать опцию dotenv path
, чтобы определить собственный путь к местоположению вашего файла .env
.Например:
require('dotenv').config({ path: 'path/to/another/folder/' })
Для ссылки на переменную DOMAIN
из скрипта nodejs мы используем process.env
, то есть process.env.DOMAIN
.
4.package.json
В разделе scripts
вашего package.json определите следующий скрипт:
"scripts": {
"example": "node some-lib-cmd"
}
Примечание: Если вырешили сохранить some-lib-cmd.js в другом месте, то есть не в корневом каталоге вашего проекта, а затем при необходимости переопределить путь в вашем скрипте example
.Например:
"scripts": {
"example": "node path/to/some/folder/some-lib-cmd"
}