【问题标题】:Webpack Externals Configuration for a Local Library本地库的 Webpack 外部配置
【发布时间】:2019-10-27 08:42:22
【问题描述】:

我想设置我的 Webpack 配置 (v4+) 以排除引用本地库的导入。在我的应用程序中,我像这样导入这个库:

/src/index.js

import foo from '../foo/foo'

console.log(foo);

/foo/foo.js

export default foo = "bar";

webpack.config.js

const path = require('path')
module.exports = {
    entry: './src/index.js',
    output: {
      filename: 'main.js',
      path: path.resolve(__dirname, 'dist')
    },
    externals: {
      "foo": path.resolve(__dirname, "./foo/foo"),
    }
  };

但是,这个库实际上已经在我部署应用程序的站点中全局引用。所以我不希望这个库与我的应用程序捆绑在一起(我仍然需要导入它,以便我可以无错误地转换我的打字稿并使用智能感知)。

我发现我可以通过使用 externals 属性轻松地将库排除在捆绑之外,如下所示:

module.exports = {
  externals: {
    "jquery": "jQuery"
  }
}

我对我正在导入的库做同样的事情没有成功。我该怎么做呢?我尝试了以下方法,但该库仍包含在我的捆绑包中:

我一直在研究文档,似乎只能找到与节点模块相关的示例,而没有针对我的要求。

如果您需要任何其他详细信息,请告诉我。提前致谢!

【问题讨论】:

  • 你有那个特定库的类型声明吗?
  • 确保从Foo 导入,而不是从Foo 的完整路径导入。即import {something} from 'Foo';
  • @dustin 在下面看到我的回答
  • @PAckerman 我没有该库的类型声明。它主要只是一个 ts 文件,它正在导出一个类,如 export class Foo {}

标签: javascript typescript webpack


【解决方案1】:

为了让 WebPack 将您的导入视为外部,您的导入声明必须使用您在 WebPack extenals 配置中定义的相同别名,而不是相对路径:

import Foo from 'foo';

网页包:

module.exports = {
  externals: {
    "foo": path.resolve(__dirname, "./path/to/foo")
  }
}

【讨论】:

  • 原始问题中的修订代码。这会改变你的答案吗?
  • 并非如此(仅在套管中...)。您正在使用相对路径导入,而不是使用 foo 别名。这就是为什么它不适合你。
  • 谢谢!我不知道配置 webpack 后我可以只使用别名而不是相对路径。
  • @Dustin 很高兴我能帮上忙!
  • 所以我最初认为这对我有用,但实际上它排除了文件,因为捆绑中有错误。来自 Terser 的 bundle.js 中的错误 Unexpected token: punc (:) 当我在浏览器中加载它时,我看到外部正在引用我的本地文件系统(例如,“C:\path\to\foo”)。我不确定此错误是否导致文件未包含在捆绑包中,或者这是与此问题无关的另一个错误。
猜你喜欢
  • 2017-03-12
  • 1970-01-01
  • 2014-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多