В доступе отказано при запуске модуля NPM, который устанавливает переменные среды в Nodejs на Kubuntu 18.04 - PullRequest
0 голосов
/ 26 мая 2019

Я пытаюсь установить переменные окружения на process.env в nodejs с помощью модуля npm env-cmd.Моя система работает под управлением Kubuntu 18.04.

Я постоянно получаю «отказано в разрешении» даже при использовании sudo.

Мои версии узла и npm - это версии менеджера пакетов Ubuntu.Так что не самые последние, а самые последние "одобренные".

Я бы хотел избавиться от этого отказа в разрешении.

Я попытался обновить env-cmd до последней версии и использовать-f переключатель с точно такими же результатами.Я проверил правильный путь к файлу и дважды проверил мой код.Это заставляет меня думать, что это «вещь linux»

из package.json

"scripts": {
    "start": "node src/index.js",
    "dev": "env-cmd ./config/dev.env nodemon src/index.js"
  },
"devDependencies": {
    "env-cmd": "^8.0.2",
    "nodemon": "^1.18.9"
  }

из dev.env

PORT=3000

из index.js

const port = process.env.PORT;

Ожидаемый результат заключается в том, что узел запускается и переменные устанавливаются в процессе.env

Выходной сигнал терминала

hoo@BadWolf:~/storage/node-task-api v3$ npm run dev

> node-task-manager@1.0.0 dev /home/hoo/storage/node-task-api v3
> sudo env-cmd ./config/dev.env nodemon src/index.js

[sudo] password for hoo: 
sudo: env-cmd: command not found

npm ERR! Linux 4.15.0-50-generic
npm ERR! argv "/usr/bin/node" "/usr/bin/npm" "run" "dev"
npm ERR! node v8.10.0
npm ERR! npm  v3.5.2
npm ERR! code ELIFECYCLE
npm ERR! node-task-manager@1.0.0 dev: `sudo env-cmd ./config/dev.env nodemon src/index.js`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the node-task-manager@1.0.0 dev script 'sudo env-cmd ./config/dev.env nodemon src/index.js'.
....(details on how to report an issue)
npm ERR!     /home/hoo/storage/node-task-api v3/npm-debug.log

debug.log:

0 info it worked if it ends with ok
1 verbose cli [ '/usr/bin/node', '/usr/bin/npm', 'run', 'dev' ]
2 info using npm@3.5.2
3 info using node@v8.10.0
4 verbose run-script [ 'predev', 'dev', 'postdev' ]
5 info lifecycle node-task-manager@1.0.0~predev: node-task-manager@1.0.0
6 silly lifecycle node-task-manager@1.0.0~predev: no script for predev, continuing
7 info lifecycle node-task-manager@1.0.0~dev: node-task-manager@1.0.0
8 verbose lifecycle node-task-manager@1.0.0~dev: unsafe-perm in lifecycle true
9 verbose lifecycle node-task-manager@1.0.0~dev: PATH: /usr/share/npm/bin/node-gyp-bin:/home/hoo/storage/node-task-api v3/node_modules/.bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
10 verbose lifecycle node-task-manager@1.0.0~dev: CWD: /home/hoo/storage/node-task-api v3
11 silly lifecycle node-task-manager@1.0.0~dev: Args: [ '-c', 'env-cmd ./config/dev.env nodemon src/index.js' ]
12 silly lifecycle node-task-manager@1.0.0~dev: Returned: code: 126  signal: null
13 info lifecycle node-task-manager@1.0.0~dev: Failed to exec dev script
14 verbose stack Error: node-task-manager@1.0.0 dev: `env-cmd ./config/dev.env nodemon src/index.js`
14 verbose stack Exit status 126
14 verbose stack     at EventEmitter.<anonymous> (/usr/share/npm/lib/utils/lifecycle.js:232:16)
14 verbose stack     at emitTwo (events.js:126:13)
14 verbose stack     at EventEmitter.emit (events.js:214:7)
14 verbose stack     at ChildProcess.<anonymous> (/usr/share/npm/lib/utils/spawn.js:24:14)
14 verbose stack     at emitTwo (events.js:126:13)
14 verbose stack     at ChildProcess.emit (events.js:214:7)
14 verbose stack     at maybeClose (internal/child_process.js:925:16)
14 verbose stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:209:5)
15 verbose pkgid node-task-manager@1.0.0
16 verbose cwd /home/hoo/storage/node-task-api v3
17 error Linux 4.15.0-50-generic
18 error argv "/usr/bin/node" "/usr/bin/npm" "run" "dev"
19 error node v8.10.0
20 error npm  v3.5.2
21 error code ELIFECYCLE
22 error node-task-manager@1.0.0 dev: `env-cmd ./config/dev.env nodemon src/index.js`
22 error Exit status 126
23 error Failed at the node-task-manager@1.0.0 dev script 'env-cmd ./config/dev.env nodemon src/index.js'.
23 error Make sure you have the latest version of node.js and npm installed.
23 error If you do, this is most likely a problem with the node-task-manager package,
23 error not with npm itself.
23 error Tell the author that this fails on your system:
23 error     env-cmd ./config/dev.env nodemon src/index.js
....(details on how to report an issue)
24 verbose exit [ 1, true ]

1 Ответ

0 голосов
/ 28 мая 2019

Решил это с помощью Адама Хартлеба, ассистента курса в Udemy. Он предложил запустить его с npx, который сработал, после некоторой порчи.

Для всех, у кого есть эта проблема, вот что я сделал:

Я решил эту проблему, проверив исходный код env-cmd, а затем перечитал документы.

Проблема в том, что, по крайней мере, в Ubuntu 18.04 env-cmd плохо работает с нестандартными расположениями файлов.

Чтобы запустить его, у вас должна быть версия Node, которая поддерживает npx. Если вы находитесь в Ubuntu, вам нужно использовать версию узла, которая не поддерживается Canonical. Я решил, что нужно установить NVM и Node 10.15.3

.

как установить NVM и Node LTS

Вам потребуется использовать расположение файла по умолчанию для вашего файла .env:

 ./.env

Вам нужно будет удалить любые ссылки на нестандартные местоположения файлов, так как их присутствие только разозлит env-cmd. Это будет буквальное зависание. (на самом деле это вызовет ошибку "зависание"). Также будет использовано слово «порождение». Я только говорю вам, что я видел.

Я изменил свой сценарий "dev" на

"dev" : "npx env-cmd nodemon src/index.js"

Теперь должно работать. Пусть боги .env будут милостивы к вашему приложению.

ОБЗОР: Как я туда попал

Предложение Адама "npx env-cmd ./config/dev.env nodemon src / index.js" привело к:

hoo@BadWolf:~/storage/node-task-api v3$ npx env-cmd ./config/dev.env nodemon src/index.js
(node:19209) UnhandledPromiseRejectionWarning: Error: Unable to locate env file at default location (./.env)
    at /home/hoo/storage/node-task-api v3/node_modules/env-cmd/dist/get-env-vars.js:47:19
    at Generator.throw (<anonymous>)
    at rejected (/home/hoo/storage/node-task-api v3/node_modules/env-cmd/dist/get-env-vars.js:5:65)
    at process._tickCallback (internal/process/next_tick.js:68:7)
    at Function.Module.runMain (internal/modules/cjs/loader.js:757:11)
    at findNodeScript.then.existing (/home/hoo/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/libnpx/index.js:268:14)
(node:19209) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 2)
(node:19209) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

Я проследил проблему до нескольких неопределенных переменных в коде модуля, которые я зарегистрировал в терминале.

hoo@BadWolf:~/storage/node-task-api v3$ npx env-cmd ./config/dev.env nodemon src/index.js
Russ logging from get-env-vars.js 27:  getEnvFile({ filePath, fallback }): filePath = undefined
Russ logging from get-env-vars.js 27: getEnvFile({ filePath, fallback }): fallback = undefined

Создание файла .env в ./.env и запуск того же сценария npx (с аргументом файла не по умолчанию)

hoo@BadWolf:~/storage/node-task-api v3$ npx env-cmd ./config/dev.env nodemon src/index.js
spawn ./config/dev.env EACCES
Hangup

Если удалено нестандартное расположение файла, чтобы запустить сервер с помощью команды env-cmd:

npx env-cmd  nodemon src/index.js
...