我已经发布了一个关于此的问题,我设法通过解决方法解决了它,但现在我有多个 UMD 模块、第三方模块,并且我自己更改模块以使其转换不再有意义。
这就是我的 .babelrc 的样子
{
"presets": [
"react",
"es2015",
"es2017",
"stage-1"
],
"plugins": [
"react-hot-loader/babel",
"transform-decorators-legacy",
"add-module-exports",
"transform-runtime"
]
}
我正在使用带有 webpack 4 的 babel 6。我的 webpack.config 看起来像这样
module: {
rules: [{
test: /\.jsx?$/,
exclude: /(node_modules|vendor)/,
loader: 'babel-loader'
},
{
test: /\.js$/,
exclude: /node_modules/,
include: /vendor/,
loader: 'babel-loader',
query: JSON.stringify(babelrcWithoutModules)
},
babelrcWithoutModules
是从 babelrc 读取的 JSON 对象,预设"es2015"
替换["es2015", { modules: false }]
为 以确保它在脚本模式下运行并且 babelrc 设置为 false,所以本质上是这样
{
'presets': [
'react', ['es2015', {
modules: false
}],
'es2017',
'stage-1'
],
babelrc: false,
'plugins': [
'react-hot-loader/babel',
'transform-decorators-legacy',
'add-module-exports',
'transform-runtime'
]
}
使用此配置,来自“vendor”目录的具有以下内容的文件主干.fetch-cache.js
(function(root, factory) {
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module and set browser global
define(['underscore', 'backbone', 'jquery'], function(_, Backbone, $) {
return (root.Backbone = factory(_, Backbone, $));
});
} else if (typeof exports !== 'undefined' && typeof require !== 'undefined') {
module.exports = factory(require('underscore'), require('backbone'), require('jquery'));
} else {
// Browser globals
root.Backbone = factory(root._, root.Backbone, root.jQuery);
}
}(this, function(_, Backbone, $)
转译到这个
(function(root, factory) {
if (typeof define === 'function' && __webpack_require__( /*! !webpack amd options */ "./node_modules/webpack/buildin/amd-options.js")) {
// AMD. Register as an anonymous module and set browser global
define(['underscore', 'backbone', 'jquery'], function(_, Backbone, $) {
return root.Backbone = factory(_, Backbone, $);
});
} else if (typeof exports !== 'undefined' && "function" !== 'undefined') {
module.exports = factory(__webpack_require__( /*! underscore */ "./node_modules/underscore/underscore.js"), __webpack_require__( /*! backbone */ "./node_modules/backbone/backbone.js"), __webpack_require__( /*! jquery */ "./node_modules/jquery/dist/jquery.js"));
} else {
// Browser globals
root.Backbone = factory(root._, root.Backbone, root.jQuery);
}
})(undefined, function(_, Backbone, $)
请注意这是如何变得未定义的。
我怎样才能使它正确地转译 UMD 模块?