【问题标题】:Getting webpack to ignore a file and just require the original one让 webpack 忽略一个文件,只需要原始文件
【发布时间】:2020-04-16 06:31:10
【问题描述】:

我重写了我的服务器端代码以使用实验性 esm 导入。这意味着__dirname 不再起作用。为了使这个库可以被非模块代码使用,我使用 webpack 转译了剥离所有导入并将其捆绑在一起的代码。但是,为了解决__dirname 问题,我有一个cjs 文件,它总是作为commonjs 模块加载,它只导出__dirname。但是,webpack 也会捆绑这个文件,并破坏 __dirname 的含义(无论你在 webpack 配置中传递哪个选项)。

所以我的问题是:我怎样才能说服 webpack 只需要这个单个文件,同时捆绑其他所有内容?

外部选项似乎只适用于不是通过路径加载的模块(如require('anyModule'))但不适用于require('./somefile.js')

PS:忽略插件不起作用。它只是在捆绑文件中包含一个错误,指出找不到该文件

【问题讨论】:

  • 如果我理解正确,您希望文件(cjs ?)按“原样”加载而不被 webapck 修改?你能用file-loader 之类的东西来做它并加载这个特定的文件。我只是不确定它会如何与所有其他人联系起来

标签: node.js webpack


【解决方案1】:

我通过传递一个函数并过滤掉该特定文件名并将其替换为文件的正确路径,使其与外部选项一起使用:

  externals: [ nodeModules, function (context, request, callback) {
    if (/dirname.cjs/.test(request)) {
      return callback(null, 'commonjs ./' + path.join('./', path.relative(__dirname, context), request).replace('\\', '/'))
    }
    callback()
  } ]

我不确定是否需要这种路径杂耍,但它可以完成工作

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-22
    • 2018-04-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多