【问题标题】:Webpack use AMD defineWebpack 使用 AMD 定义
【发布时间】:2018-03-12 22:11:46
【问题描述】:

我正在尝试将我的公司项目从 JSPM 和 systemJS 转换为 webpack。 所以我从头开始了一个新项目并安装了基本配置。

我需要在项目中包含一个由前同事构建的旧包。该包是用 Jquery 开发的,使用 AMD 定义方法。

于是我搜索并找到了imports-loader

在我的 webpack 配置中,我有:

{
      test: path.resolve(__dirname, 'vendor/module/module.js'),
      loader: "imports-loader?this=>window&define=>false"
},

在我的代码中,我有以下内容:

import Module from 'module';
new Module.WindowManager(arg1, arg2);

当我运行 webpack 时,我得到了这个错误:

Uncaught Error: module/wm/window missing module/core/emitter

在我尝试使用模块/核心/发射器的模块中:

define('module/wm/window', 
    ['module/core/emitter'], function (Emitter) { ... });

【问题讨论】:

  • 所以,第一个问题:错误说它无法加载模块/核心/发射器,它是否存在于磁盘上?如果是这样,您的配置是否规定 define 可以在哪里找到东西指向正确的目录?
  • @Mike'Pomax'Kamermans 关于第一个问题,模块/核心/发射器定义在我尝试导入的模块的同一文件中。不明白第二个问题。你指的是哪个配置?是 webpack 配置吗?
  • 我创建了一个 github 项目来重现我提到的错误。 github.com/jcrjaci/webpack-tests
  • webpack 不使用define。我知道的唯一使用它的框架是 require.js,所以我的第一个猜测是你有一些在重写过程中没有正确配置的 require.js 代码。那个 github 项目试图打包一个已经缩小的 .js 文件,所以这使得......好吧,真的没有意义。你为什么要捆绑一个已经捆绑的库?
  • @Mike'Pomax'Kamermans 因为缩小的 js 需要 jquery 是全局的。如果我在 html 中导入最小化的 js 和 jquery,它就可以工作。但我只想通过 webpack 和 npm 管理我的外部包。

标签: javascript jquery reactjs webpack ecmascript-6


【解决方案1】:

复制代码后,使用amdwebpack 就可以了。

您的代码只是缺少这些 id 依赖项 deskum/core/emitterdeskum/core/promise。确保检查那些iddefine。我已尝试删除这些依赖项,它的工作原理

如您所见,我可以将Deskumwindow 设置为属性类this.deskum,但this.deskum.Window() 有抛出错误,因为我在deskum.min.js 处删除了"deskum/core/emitter","deskum/core/promise"

只需确保包含所有依赖项,请参阅documentation

【讨论】:

  • 如果我在 html 中包含 jquery 和deskum.min.js。有用。但如果可能的话,我想避免这种情况。
  • 您可以通过webpack 使用ProvidePlugin (webpack.js.org/plugins/provide-plugin/#usage-jquery) 添加jquery
  • 添加继续使用deskum.min.jsimport-loader
  • 我不确定"deskum/core/emitter","deskum/core/promise",但它似乎没有定义和来自外部库,对吧? @Jacinto
  • 我不这么认为。在当前项目中,deskum.min.js 是通过 System.js 加载的。在deskum.min.js 文件之外没有引用deskum/core/emitter
猜你喜欢
  • 2017-04-24
  • 2019-05-12
  • 1970-01-01
  • 1970-01-01
  • 2015-01-25
  • 1970-01-01
  • 1970-01-01
  • 2017-10-30
  • 2015-12-01
相关资源
最近更新 更多