【问题标题】:Wepback require from variableWebpack 需要来自变量
【发布时间】:2017-01-02 19:54:46
【问题描述】:

我正在制作控制台实用程序,它接受配置文件的路径作为控制台参数。

F.e: 实用程序 -f /path/to/file.js

我需要这个文件来读取配置。是否可以使用 webpack 处理这个问题?据我了解,在这种情况下上下文无法帮助我。

谢谢。

附:我已经在使用 webpack。

P.S 解决方案是使用类似:eval('require')(dynamicPath)

【问题讨论】:

  • 我不认为你需要 webpack 只是为了这个 - 你应该可以在访问 process.argv 后需要它
  • 我已经在这个项目中使用了 webpack。我只需要需要配置文件。
  • 好的 - 我将在下面的答案中添加更全面的解释:)

标签: javascript webpack


【解决方案1】:

如果需要的文件在编译时可用,Webpack 只能执行这样的动态请求。例如,如果您需要“动态”文件路径,例如

require('./assets/images/' + someVariable + '.png')

然后,在底层,Webpack 将在捆绑的 require 代码中包含与该模式匹配的 所有 图像。它基本上将包括所有匹配正则表达式的文件:

/.\/assets\/images\/*.png/

我可能会尝试将配置文件放在特定文件夹中,并在该文件夹上使用 require:

require('./configs/' + process.env.CONFIG_NAME);

这样 Webpack 将只包含 configs 文件夹中的所有文件。

Webpack 文档可怕,但有更多信息on the dynamic requires page

【讨论】:

  • 啊..我什至试图制作像 let load = require; 这样的东西。加载(动态路径);但它足够聪明)
  • 这有帮助:eval('require')(dynamicPath)
【解决方案2】:

如果您将配置文件作为参数传递给节点进程,则可以在process.argv 命令行参数数组中访问它。我不知道您是否正在使用其他框架(如优秀的commander)来帮助制作命令行程序,但我们可以对数组进行切片以找到我们需要的内容。

要从启动脚本的目录解析路径,您可以使用process.cwd() - 这将返回节点进程工作目录的绝对路径。

最后,您可以使用path.resolve(processPath, configPath) (docs) 生成始终保证解析为配置的路径。然后,您可以要求此路径。

您可能需要先执行此操作。您的文件顶部可能如下所示:

/* relevant require() calls for necessary modules */
var path = require('path');

// first two arguments are node process and executed file
var args = process.argv.slice(2); 

var configIndex = args.findIndex('-f') + 1;
var configPath = path.resolve(process.cwd(), args[configIndex]);

var config = require(configPath);

/* the rest of your code */

【讨论】:

  • 我认为这与将动态文件路径构建到 webpack 包中的问题无关
  • 这个问题是指制作一个控制台实用程序,它将配置文件路径作为参数,以及如何在您的代码中要求它 - 或者在我看来是这样。当然,这取决于实用程序的用途以及配置的用途。
  • 是的,问题更多在于没有简单的方法可以用 webpack 编写 require(filePath)。它总是试图解析这条路径,这会导致上下文。
猜你喜欢
  • 2017-11-24
  • 1970-01-01
  • 2020-12-18
  • 1970-01-01
  • 2023-03-17
  • 2013-05-16
  • 2017-03-18
  • 2011-11-24
  • 1970-01-01
相关资源
最近更新 更多