【问题标题】:Webpack Uglify plugin returns "Killed" on UbuntuWebpack Uglify 插件在 Ubuntu 上返回“Killed”
【发布时间】:2015-06-10 04:48:03
【问题描述】:

在我的远程服务器(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();
        }
    });
});

【问题讨论】:

  • 与 AWS 免费套餐 micro.t2 相同

标签: gulp webpack


【解决方案1】:

正如@barbuza 所建议的,这是一个内存问题。我也在使用只有 512 MB RAM 的 Digital Ocean VPS(是的,我很便宜)。这对于 webpack 的 uglify 插件来说还不够。在服务器上添加 2GB 交换空间解决了这个问题。我按照这篇文章进行了设置:https://www.digitalocean.com/community/tutorials/how-to-add-swap-on-ubuntu-14-04

【讨论】:

  • 真正的解决方案是一起避开这个问题——在本地编译,然后使用scpftp 或其他任何方法将编译后的资产放在服务器上的正确位置。
  • 您有没有发现任何硬件问题?因为 Digital Ocean 警告不要在其服务器上创建交换 digitalocean.com/community/tutorials/…
  • @Green 我没有,我不认为他们在回答这个问题时反对它。我认为你可能会安全地这样做,但就像我在上面的评论中所说的那样,最好完全避开这个问题。
  • 在 upcloud 实例中执行此操作,效果相同 (linuxize.com/post/how-to-add-swap-space-on-ubuntu-20-04)。
  • 谢谢!我补充说它也可以解决角度部署问题
【解决方案2】:

如上所述,在使用 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 文件。

【讨论】:

  • 这是最简单的选择。只需使max_old_space_size 比您服务器的 RAM 小很多,它就可以工作。
【解决方案3】:

我在数字海洋虚拟机上遇到了同样的问题,结果发现没有配置交换,所以它只是内存不足。

【讨论】:

    【解决方案4】:

    您也可以在本地计算机上运行 ng build,然后将 dist 文件夹复制到远程,如下所示:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多