Webpack Uglify插件在Ubuntu上返回“Killed”

18
在我的远程服务器上(Ubuntu 14.04 x64),每当我尝试压缩我的捆绑包时,该进程会简单地返回"Killed"。当我不压缩时,它就很好。有人遇到过这种情况吗?当我在本地的Mac上执行此操作时,一切正常(虽然我刚刚测试了一下,它需要1.4分钟)。这是我的webpack.config:
var webpack = require('webpack');

function makeConfig(opts) {
    var config = {

        entry: {
            app: ['./public/scripts/main.js'],
            vendor: ['lodash', 'react', 'react/lib/ReactCSSTransitionGroup', 'react-router', 'reqwest', 'd3']
        },

        stats: {
            colors: true,
            reasons: true
        },

        output: {
            devtool: (opts.env === 'dev' ? '#eval-source-map' : ''),
            path: 'dist/scripts',
            filename: '[name].bundle.js'
        },

        plugins: [
            new webpack.DefinePlugin({
                ENV: opts.env
            }),
            new webpack.optimize.CommonsChunkPlugin('vendor.bundle.js')
        ],

        module: {
            loaders: [
                { test: /\.jsx?$/, loader: 'jsx-loader' }
            ]
        }
    };

    if(opts.env === 'prod') {
        config.plugins.push(
            new webpack.optimize.UglifyJsPlugin(),
            new webpack.optimize.DedupePlugin()
        );
    }

    return config;
}

module.exports = makeConfig;

然后使用 gulp 这样调用它:

gulp.task('webpack', ['cleanScripts'], function(done) {
    webpack(webpackConfig, function(err, stats) {
        if(err) {
            console.error(err);
            throw new gutil.PluginError('webpack', err);    
        }
        else {
            done();
        }
    });
});

1
与 AWS 免费套餐的微型 t2 相同。 - Green
与 AWS t2.small 层相同。不得不将其升级为 t3.large。 - prat_bhan
4个回答

34

4
真正的解决方案是完全避开这个问题——在本地编译,然后使用“scp”、“ftp”或其他方式将编译好的资源放到服务器的正确位置。 - ccnokes
你有没有注意到任何硬件问题呢?因为Digital Ocean警告不要在其服务器上创建交换空间。https://www.digitalocean.com/community/tutorials/how-to-add-swap-space-on-ubuntu-16-04 - Green
@Green 我并没有这样做,而且我认为当时回答这个问题的人也没有建议反对这样做。我想你做这件事可能会比较安全,但就像我在评论中所说的那样,最好完全避免这个问题。 - ccnokes
我在UpCloud实例中尝试了这个方法,效果一样。(https://linuxize.com/post/how-to-add-swap-space-on-ubuntu-20-04/) - mrcaramori
谢谢!我还要补充一下,它也可以解决Angular部署问题。 - sohaieb azaiez

9

在使用Digital Ocean VPS时,我也遇到了同样的问题,如上所述 - 这是因为构建过程占用了您机器太多的RAM,因此它会出现"内存不足"的情况。

要解决这个问题,您可以通过---max_old_space_size选项来最小化文件编译时的RAM使用率,下面是一个高级示例:

node --max_old_space_size=1096 node_modules/webpack/.bin/webpack.js

当然,您可以选择任何大小,同样您也可以使用webpack-dev-server进行相同的操作。并且在其他用途真正需要时才添加交换空间,例如您仅运行此命令一次以编译bundle.js文件。


1
这是最简单的选择。只需将 max_old_space_size 设为比服务器 RAM 小得多的数值,它就能正常工作了。 - Mark McKelvy

1

我在Digital Ocean虚拟机上遇到了相同的问题,原来没有配置交换分区,因此它的内存被耗尽了。


0

你也可以在本地运行 ng build,然后将 dist 文件夹复制到远程服务器,方法如下:

scp -r path/to/local/folder user@x.x.x.x:/path/to/remote/folder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接