【问题标题】:How to bundle commonjs modules except specified requires [closed]如何捆绑除指定之外的commonjs模块需要[关闭]
【发布时间】:2016-09-12 20:17:25
【问题描述】:

除指定要求外,如何通过 webpack 或 gulp+browserify 进行捆绑,例如忽略 var module = require(pathToModule); 以便生成的捆绑包也包含 var module = require(pathToModule);

【问题讨论】:

  • "忽略 var module = require(pathToModule); 因此,生成的包也包含 var module = require(pathToModule);"你想忽略还是包含它?
  • "你想忽略还是包含它?" - 我想忽略捆绑器中的一些要求并将其包含在结果包中(在我的 espruino 中有像“@amperka/button”这样的模块通过要求连接)

标签: javascript gulp webpack browserify commonjs


【解决方案1】:

这可以通过 webpack externals option 来完成

您也可以在需要时为应用程序使用externals 选项 将现有 API 导入到包中。 IE。你想使用jquery 来自 CDN(单独的 <script> 标签)并且仍然想要 require("jquery") 在您的捆绑包中。只需将其指定为external: { externals: { jquery: "jQuery" } }。

webpack.config

{
    externals: {
        // require("jquery") is external and available
        //  on the global var jQuery
        "jquery": "jQuery"
    }
}

如果你希望 webpack 忽略外部模块并在输出中保留 require 语句,你可以使用空加载器

loaders: [{
    test: /@amperka\/.*/,
    loader: 'null'
}

【讨论】:

  • 不幸的是,这个决定是如果有一个全局变量,但在我的情况下,我需要在结果包中有一些 require('module') - espruino 自己解决了这个要求
  • this 有帮助吗?它允许在磁盘上 require 和外部模块,并将 require 语句写入包。这也可能有所帮助:stackoverflow.com/a/32061956/1787868
  • 随便Module not found: Error: Cannot resolve module '@amperka/buzzer' ...
  • 不确定为什么会出现此错误。您能否在您的问题中提供有关您的环境、源代码示例和详细错误(堆栈跟踪)的更多信息?谢谢
【解决方案2】:

使用 Webpack 中的 externals 设置来指定将在包之外加载所需的模块。

{
  ...

  externals: {
      // require("jquery") is external and available on the global var jQuery
      "jquery": "jQuery"
  }

  ...
}

因此,从您的包中调用 require("jquery") 将改为引用全局变量 jQuery - 这显然要求您在包之前加载 jQuery,例如

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.js"></script>
<script src="bundle.js"></script>

【讨论】:

    猜你喜欢
    • 2011-11-26
    • 2020-10-06
    • 2015-03-31
    • 1970-01-01
    • 2012-07-09
    • 1970-01-01
    • 1970-01-01
    • 2020-09-02
    • 2020-06-26
    相关资源
    最近更新 更多