【问题标题】:How to dynamically import package.json dependencies based on environment variables?如何根据环境变量动态导入package.json依赖?
【发布时间】:2021-05-26 21:57:48
【问题描述】:

如何将脚本添加到我的 package.json 文件中,以允许我动态使用本地文件而不是基于环境变量的包版本?

"dependencies": {
  "dynamic-dependency": "$(process.env.NODE_ENV !== 'dev' ? '^1.0.7' : 'file:../local-path-to-package')"
}

【问题讨论】:

  • 我猜你可以把 JSON 变成一个对象,然后将子进程运行到 npm install 他们每个人

标签: node.js reactjs environment-variables development-environment package.json


【解决方案1】:

您不能在 package.json 中执行此操作,这是不可执行的 JSON 文件。 package.json 中使用的 JSON 变体甚至不支持 cmets :)。 package.json 的目的是指定将哪些依赖项安装到node_modules 中,仅此而已。安装了这些依赖项后,Node 可以在运行时使用它们,Node 使用 module resolution algorithm 定位它们:

如果传递给 require() 的模块标识符不是核心模块,并且不以 '/'、'../' 或 './' 开头,则 Node.js 从当前模块,并添加 /node_modules,并尝试从该位置加载模块。 Node.js 不会将 node_modules 附加到已经以 node_modules 结尾的路径。

所以你不能为此使用 NPM/package.json。但是,我看到你用 React 标记了你的问题,所以如果你使用 Webpack,你可以在你的 Webpack 配置中解决这个问题。这可以通过resolve.alias 来完成:

const path = require('path');

module.exports = {
  //...
  resolve: {
    alias: {
      'dynamic-dependency': process.env.NODE_ENV !== 'dev' ? 'dynamic-dependency' : path.resolve(__dirname, '../local-path-to-package'),
    },
  },
};

我没有使用过其他的 JS 打包器,但我认为 Parcel/Rollup 等也支持这种配置。

【讨论】:

    猜你喜欢
    • 2019-05-27
    • 2019-12-06
    • 2021-12-25
    • 2016-01-14
    • 2023-02-23
    • 2016-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多