禁用AMD模块加载

时间:2017-01-26 07:24:35

标签: webpack swagger babel

我在使用webpack和babel-loader的堆栈中使用swagger生成的api。 webpack尝试将文件作为AMD模块加载并失败。

ERROR in D:/project/src/javascripts/api/location/model/Location.js
Module not found: Error: Cannot resolve module 'ApiClient' in D:\project\src\javascripts\api\location\model
 @ D:/project/src/javascripts/api/location/model/Location.js 22:4-34

当我在swagger文件中删除amd-part时(如下),它可以工作:

if (typeof define === 'function' && define.amd) {
 // AMD. Register as an anonymous module.
 define(['superagent'], factory);
}

我知道webpack loader" import"支持参数define-> false来解决此类问题。但我找不到bable-loader的解决方案。 有人可以提出解决方案吗?

1 个答案:

答案 0 :(得分:1)

就我而言,我在webpack配置中添加了另一条规则。我将swagger生成的客户端作为单独的包导入,所以我只希望imports-loader运行node_modules

请注意,下面的代码使用webpack 2语法。如果您使用的是旧版本的webpack,则需要进行调整。

module: {
  rules: [
    {
      test: /\.js$/,
      use: 'babel-loader',
      exclude: /node_modules/,
    },
    {
      test: /\.js$/,
      use: 'imports-loader?define=>false',
      include: /node_modules/,
    },
  ],
}

我不确定你的情况如何,但你可能需要做类似的事情。 swagger生成的代码可能不需要通过babel运行。