移除bable打包的use strict模式(vue-cli2)
打包之后dist文件夹全局查看use strict个数
babel-loader有一个插件transform-remove-strict-mode,webpack.config.js的配置如下(记得要安装npm i babel-plugin-transform-remove-strict-mode -S或者yarn add babel-plugin-transform-remove-strict-mode -S)
1.一个loader(文件名叫remove-strict.js):
function removeStrict(code) {
return code.replace(/(\"|\')use strict(\"|\');/gi, '');
}
module.exports = function(source) {
// source 为 compiler 传递给 Loader 的一个文件的原内容
source = removeStrict(source);
return source;
};
webpack.config.js
resolveLoader: {
// 这个是声明你本地loader位置的地方,因为我没有上传npm包,remove-strict.js放在loaders目录下
modules: [path.join(__dirname, '../loaders/'), 'node_modules']
},
module: {
rules: [
{
test: /\.js$/,
use: [
{
loader: 'babel-loader',
query: {
plugins: ["transform-remove-strict-mode"],
}
},
{
loader: 'remove-strict'
}
]
}
]
}
打包之后dist文件夹全局查看use strict个数
2.新建RemoveStrictPlugin .js
class RemoveStrictPlugin {
constructor() {
}
removeStrict(content) {
if (content && content.replace) {
const re = /(\"|\')use strict(\"|\');?/gi;
return content.replace(re, () => {
return '';
});
}
return content;
}
apply(compiler) {
const self = this;
compiler.plugin("compilation", function (compilation) {
compilation.plugin("optimize-chunk-assets", function (chunks, callback) {
let files = [];
chunks.forEach(function (chunk) {
return files.push.apply(files, chunk.files);
});
files.forEach(file => {
let chunkSource = compilation.assets[file];
let source = chunkSource._source;
let children = source.children;
source.children = children.map(item => {
if (typeof item === 'string') {
return self.removeStrict(item);
}
else if (typeof item === 'object' && item._source) {
item._source.value = self.removeStrict(item._source.value);
return item;
}
else {
return item;
}
});
});
callback();
});
});
}
}
module.exports = RemoveStrictPlugin;
const RemoveStrictPlugin = require('../plugins/RemoveStrictPlugin');
module.exports = {
// 其他配置...
plugins: [
new RemoveStrictPlugin()
]
};
打包之后dist文件夹全局查看use strict个数
打包部署ie查看取消成功