@arco-plugins/webpack-react
Version:
arco webpack plugin
68 lines (67 loc) • 3.07 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ImportPlugin = void 0;
var utils_1 = require("@arco-plugins/utils");
var transform_import_1 = require("./utils/transform-import");
var utils_2 = require("./utils");
var config_1 = require("./config");
/**
* 给匹配的文件的 babel-loader 增加 babel-plugin-import
*/
var ImportPlugin = /** @class */ (function () {
function ImportPlugin(options) {
this.options = options;
this.babelPlugins = (0, transform_import_1.getBabelPlugins)(this.options);
}
ImportPlugin.prototype.apply = function (compiler) {
var _this = this;
var include = this.options.include;
var context = (0, utils_2.getContext)(compiler, this.options.context);
var extensions = (0, utils_1.arrify)(this.options.extensions);
var isMatch = utils_1.pathUtils.matcher(include, { extensions: extensions, cwd: context });
var loader = require.resolve('./loaders/transform-import');
(0, utils_2.hookNormalModuleLoader)(compiler, config_1.PLUGIN_NAME, function (_loaderContext, module, resource) {
if (isMatch(resource) && !(0, utils_2.getLoader)(module.loaders, loader)) {
var loaders = module.loaders;
var babelLoaderIndex = (0, utils_2.getLoaderIndex)(loaders, 'babel-loader');
var tsLoaderIndex = (0, utils_2.getLoaderIndex)(loaders, 'ts-loader');
var shouldModifyBabelLoader = _this.options.modifyBabelLoader && babelLoaderIndex > -1;
var options = {
style: _this.options.style,
libraryDirectory: _this.options.libraryDirectory,
iconBox: _this.options.iconBox,
babelConfig: _this.options.babelConfig,
};
if (shouldModifyBabelLoader) {
var _loader = loaders[babelLoaderIndex];
if (_this.options.modifyBabelLoader === 'merge') {
(0, transform_import_1.modifyBabelLoaderMerge)(_loader, options);
}
else {
(0, transform_import_1.modifyBabelLoaderOverride)(_loader, options);
}
return;
}
var insertIndex = loaders.length - 1;
if (babelLoaderIndex > -1) {
insertIndex = babelLoaderIndex + 1;
}
else if (tsLoaderIndex > -1) {
insertIndex = (tsLoaderIndex || 1) - 1;
}
loaders.splice(insertIndex, 0, {
loader: loader,
options: options,
ident: null,
type: null,
});
module.loaders = loaders;
}
});
};
ImportPlugin.prototype.getBabelPlugins = function () {
return this.babelPlugins.slice(0);
};
return ImportPlugin;
}());
exports.ImportPlugin = ImportPlugin;