Ich habe eine Webpack-Konfiguration, die auf https://github.com/vuejs-templates/webpack-simple/blob/master/template/webpack.config.js basiert Es verwendet Vue-Loader und Babel-Loader. Das Problem ist, dass ich ES5-Code nicht erzeugen kann, so dass es in den meisten Clients funktioniert.Webpack mit Babel-Loader nicht gültig es5
Wenn ich die ES2015-Voreinstellung verwende, kann webpack.optimize.UglifyJsPlugin
die Ausgabe nicht minimieren, da Uglify nur ES5 verarbeiten kann (ohne den Harmonienzweig zu berücksichtigen). Die Fehler sind ähnlich wie: Unexpected token: punc (()
und in mehreren Dateien auftreten.
Ich kann dies umgehen, indem Sie babili-webpack-plugin
verwenden, die den ES6-Code minimieren wird, aber sehr langsam ist. Jedoch, wenn ich diesen Code bereitstellen, sehe ich Fehler zurück gemeldet werden, sagen Block-scoped declarations (let, const, function, class) not yet supported outside strict mode
, so dass ich weiß, dass sie ältere Clients sind erstickt auf ES6-Code.
Wie bekomme ich die richtige ES5-Code-Ausgabe von babel-loader? Ich habe mehrere Presets ausprobiert, mit oder ohne transform-runtime
Plugin. Config unter:
const webpack = require('webpack');
const globEntries = require('webpack-glob-entries');
const _ = require('lodash');
const path = require('path');
const BabiliPlugin = require("babili-webpack-plugin");
const env = process.env.NODE_ENV;
let entries;
if (env === 'production') {
entries = globEntries('./src/**/vue/*.js');
} else {
entries = _.mapValues(globEntries('./src/**/vue/*.js'), entry => [entry, 'webpack-hot-middleware/client?reload=true']);
}
module.exports = {
entry: entries,
output: {
path: '/', ///no real path is required, just pass "/"
publicPath: '/vue',
filename: '[name].js',
},
module: {
rules: [
{
test: /\.vue$/,
loader: 'vue-loader',
options: {
loaders: {
scss: 'vue-style-loader!css-loader!sass-loader',
sass: 'vue-style-loader!css-loader!sass-loader?indentedSyntax',
},
// other vue-loader options go here
},
},
{
test: /\.js$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader',
query: {
presets: ['es2015'],
plugins: ['transform-runtime'],
},
},
},
{
test: /\.(png|jpg|gif|svg)$/,
loader: 'file-loader',
options: {
name: '[name].[ext]?[hash]',
},
},
],
},
resolve: {
alias: {
vue$: 'vue/dist/vue.esm.js',
},
},
plugins: [
new webpack.HotModuleReplacementPlugin(), // Enable HMR
new webpack.NoEmitOnErrorsPlugin(),
],
performance: {
hints: false,
},
devtool: '#eval-source-map',
};
if (env === 'staging' || env === 'production') {
//module.exports.devtool = env === 'staging' ? '#source-map' : false;
module.exports.devtool = '#source-map';
module.exports.output.path = path.resolve(__dirname, './src/v1/parse/cloud/public/vue');
// http://vue-loader.vuejs.org/en/workflow/production.html
module.exports.plugins = (module.exports.plugins || []).concat([
new webpack.DefinePlugin({
'process.env': {
NODE_ENV: `"${env}"`,
},
}),
new webpack.optimize.UglifyJsPlugin({
sourceMap: true,
compress: {
warnings: false,
},
}),
// new BabiliPlugin(),
new webpack.LoaderOptionsPlugin({
minimize: true,
}),
]);
}
Können Sie ein minimales Repo für Ihre Konfiguration bereitstellen? –
@HerringtonDarkholme Ich könnte ein Repo mit meinem package.json und meinem webpack.config.js bereitstellen, aber Code darüber hinaus wäre schwierig. – emkman
Verwenden Sie eine '.babelrc' Datei? ('vue-loader' wird' babel-loader' verwenden.) Vielleicht möchten Sie auch die Presets 'es2016' und' es2017' (oder 'env') verwenden. – bzeaman