2017-04-11 63 views
0

我使用的分佈作爲UMD模塊lib和代碼從我正在導入看起來像這樣模塊未裝載必須具有正常或音調功能

lib.js文件的一個

(function (global, factory) { 
    if (typeof define === "function" && define.amd) { 
     define(['exports', '../utils/require-isdefined-plugin!lodash'], factory); 
    } else if (typeof exports !== "undefined") { 
     factory(exports, require('lodash')); 
    } else { 
     var mod = { 
      exports: {} 
     }; 
     factory(mod.exports, global.lodash); 
     global.registry = mod.exports; 
    } 
})(this, function (exports, _lodash) { 
    'use strict'; 
    // Library code 
}) 

,現在當我使用這個lib.js在我的代碼和運行的WebPack,它拋出這個錯誤

錯誤:模塊「H:\項目\ ABC \ UMD \程序\ utils的\要求-isdefined-插件.js'不是加載程序(必須具有正常或音調功能)

我認爲是的WebPack治療「../utils/require-isdefined-plugin」作爲裝載機和抱怨。

我的問題是如何,我讓的WebPack知道這是不是一個加載並執行此文件通常或

有沒有其他的辦法,使這項工作?

回答

1

最簡單,坦率地說最好的解決辦法是使用一個不同的版本。現在大多數圖書館都有UMD版本以及npm套件。

如果不是,您可以使用imports-loader禁用AMD define如圖Shimming - imports-loader的選項,所以的WebPack不能觸摸它,將使用CommonJS的版本。你會添加一個規則庫:

{ 
    test: require.resolve('./path/to/lib'), 
    loader: 'imports-loader?define=>false' 
} 

require.resolve的工作方式相同的常規require但給你的解決模塊,而不是其內容的完整路徑,所以你仍然可以做require.resolve('lib')如果這就是你如何導入它。

爲了安全起見,你也應該排除從常規.js規則庫,因爲有同一個文件的兩個規則通常不會有好下場的。您的規則可能是這樣的:

rules: [ 
    { 
    test: /\.js$/, 
    loader: 'babel-loader', 
    exclude: [/node_modules/, require.resolve('./path/to/lib')] 
    }, 
    { 
    test: require.resolve('./path/to/lib'), 
    loader: 'imports-loader?define=>false' 
    } 
]