node.js - 如何根据环境变量动态导入package.json依赖?

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

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

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

最佳答案

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

If the module identifier passed to require() is not a core module, and does not begin with '/', '../', or './', then Node.js starts at the parent directory of the current module, and adds /node_modules, and attempts to load the module from that location. Node.js will not append node_modules to a path already ending in 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 等也支持这种配置。

关于node.js - 如何根据环境变量动态导入package.json依赖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66353306/

相关文章:

node.js - 有没有办法访问 mongodb node.js 驱动程序功能,同时仍然使用 mongoose 进行模式定义?

node.js - 启动应用程序上的 Electron 闪屏

javascript - 在 dangerouslySetInnerHTML 中从 onclick 调用 React 组件函数

reactjs - 即使 flex : 1,React Native 文本输入字段也不会全宽

c++ - 在 Linux 中获取环境变量作为 UTF-8 字符串

linux - 如何创建具有多个变量的环境以在 Linux 中运行程序?

node.js - 让gulp.js打开非默认浏览器

sql-server - 如何使用 Sinon 来使用 mssql 库对与数据库的交互进行 stub ?

reactjs - React useCallback 内存泄漏卸载组件

c# - 我可以在 Visual Studio 命令行参数中使用用户的环境变量吗?