我通过webpack
/ gulp
使用node
和npm
来构建和uglify浏览器应用程序。问题是输出app.js大约是1.9Mb。它似乎太大了,暗示我可能会遗漏一些东西。
我使用gulp build --release
这是我的gulp文件:
import path from 'path';
import cp from 'child_process';
import gulp from 'gulp';
import gulpLoadPlugins from 'gulp-load-plugins';
import del from 'del';
import mkdirp from 'mkdirp';
import runSequence from 'run-sequence';
import webpack from 'webpack';
import minimist from 'minimist';
const $ = gulpLoadPlugins();
const argv = minimist(process.argv.slice(2));
const src = Object.create(null);
let watch = false;
let browserSync;
// The default task
gulp.task('default', ['sync']);
// Clean output directory
gulp.task('clean', cb => {
del(['.tmp', 'build/*', '!build/.git'], {dot: true}, () => {
mkdirp('build/public', cb);
});
});
// Static files
gulp.task('assets', () => {
src.assets = 'src/public/**';
return gulp.src(src.assets)
.pipe($.changed('build/public'))
.pipe(gulp.dest('build/public'))
.pipe($.size({title: 'assets'}));
});
// Resource files
gulp.task('resources', () => {
src.resources = [
'package.json',
'src/content*/**',
'src/templates*/**'
];
return gulp.src(src.resources)
.pipe($.changed('build'))
.pipe(gulp.dest('build'))
.pipe($.size({title: 'resources'}));
});
// Bundle
gulp.task('bundle', cb => {
const config = require('./webpack.config.js');
const bundler = webpack(config);
const verbose = !!argv.verbose;
let bundlerRunCount = 0;
function bundle(err, stats) {
if (err) {
throw new $.util.PluginError('webpack', err);
}
if (++bundlerRunCount === (watch ? config.length : 1)) {
return cb();
}
}
if (watch) {
bundler.watch(200, bundle);
} else {
bundler.run(bundle);
}
});
// Build the app from source code
gulp.task('build', ['clean'], cb => {
runSequence(['assets', 'resources'], ['bundle'], cb);
});
最终的app.js缩小了,我也在使用DedupePlugin
,UglifyJsPlugin
和AggressiveMergingPlugin
。
这是我的webpack.config
const DEBUG = !argv.release;
const appConfig = merge({}, config, {
entry: './src/app.js',
output: {
path: './build/public',
filename: 'app.js'
},
node: {
fs: 'empty'
},
devtool: DEBUG ? 'eval-cheap-module-source-map' : false,
plugins: config.plugins.concat([
new DefinePlugin(merge(GLOBALS, {
'__SERVER__': false
}))
].concat(DEBUG ? [] : [
new webpack.optimize.DedupePlugin(),
new webpack.optimize.UglifyJsPlugin(),
new webpack.optimize.AggressiveMergingPlugin()
])
)
});
答案 0 :(得分:2)
我对Gulp不太熟悉,但我知道看到我最初的Webpack构建大小,特别是来自Grunt的开发服务器输出非常令人生畏......
import
的包裹。也许您安装的某些软件包比预期的要大。 (反应本身就是〜150mb缩小)Webpack很棒,但比其他许多前端构建工具需要更多的使用。我强烈建议在一些较小的项目中单独尝试Webpack,而不是与其他工具混合使用。如果您使用Gulp做了一些您无法使用Webpack的事情,我会感到惊讶,您可以省去让两个构建工具协同工作的麻烦。
希望这有帮助......如果您使用React,我还会查看Pete Hunt's Webpack HowTo和Christian Alfoni's React-Webpack Cookbook。
绝对将NODE_ENV=production
看作上面提到的@djskinner,以确保npm react包知道你正在进行生产构建。