【问题标题】:How can a bash script in an NPM module access its NPM environment variables?NPM 模块中的 bash 脚本如何访问其 NPM 环境变量?
【发布时间】:2021-08-17 21:38:13
【问题描述】:

当从父 NPM 模块调用时,我需要访问在其中运行的 bash 脚本中子模块的 npm 环境变量。

项目伪结构:

Parent NPM Project
│
├── node_modules
│   │
│   ├── npm-submodule
│   │   │
│   │   ├── bash-script.sh
│   │   │
│   │   └── package.json
│   .   
│     
├── package.json
│      
.

父 NPM 项目 — package.json:

{
  "name": "parent-project",
  "scripts": {
    "get-package-name": "echo $npm_package_name",
    "get-submodule-name": "npm-submodule"
  },
  "dependencies": {
    "npm-submodule": "1.0.0"
  }
}

NPM 子模块 — package.json:

{
  "name": "npm-submodule",
  "bin": "./bash-script.sh",
  "scripts": {
    "get-package-name": "echo $npm_package_name"
  }
}

NPM 子模块 — bash-script.sh:

#!/bin/bash

npm run get-package-name

问题

从父模块中,当我运行npm run get-package-name 时,可以预见parent-project 会返回。

当我运行 npm run get-submodule-name 时,没有返回任何内容 — 以这种方式调用子模块时,子模块的 npm 环境变量似乎没有填充到子模块中。

基于 bash 的上下文中,子模块如何访问它自己的 NPM 环境值,或者如果不这样做,直接从 package.json 读取它们?

【问题讨论】:

  • 我见过这个:stackoverflow.com/q/40587216/2876202,但答案是错误的:“..node 环境变量只能使用节点进程中的进程全局变量访问,而不是系统范围的”,显然节点环境可以在父模块package.json 的运行脚本中访问——希望有一个解决方案????????

标签: node.js bash npm package.json environment


【解决方案1】:

我想出的一个可行的解决方案是获取 bash 脚本所在的文件夹,然后执行以下操作:

#!/bin/bash

MODULE_DIR=$(dirname "$(realpath "$0")")
cd "$MODULE_DIR" && npm run get-package-name -s

我使用 npm link 对其进行了测试,它在任何其他 NPM 项目中都可以在全球范围内运行,但我仍然对其他解决方案感兴趣。

【讨论】:

    猜你喜欢
    • 2017-12-25
    • 1970-01-01
    • 2016-03-01
    • 2017-02-22
    • 1970-01-01
    • 2021-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多