【问题标题】:rails webpack compilation hangs in production at 78% [0] chunk asset optimization TerserPluginrails webpack 编译在生产中挂起 78% [0] 块资产优化 TerserPlugin
【发布时间】:2019-10-02 00:36:58
【问题描述】:

我正在使用带有 webpack 的 Rails 5,尝试编译用于​​生产,因为资产不会出现在生产中。

如果我尝试NODE_ENV=production rake webpacker:compile,那么它会挂在Compiling...

阅读Compiling in production fails silently and isn't verbose enough后,我尝试了NODE_ENV=production bin/webpack --progress --config config/webpack/production.js。它挂在78% [0] chunk asset optimization TerserPlugin

我读到了这个https://fontawesome.com/how-to-use/with-the-api/other/tree-shaking#issues,但我不确定如何将 Rails webpack 切换为使用 Babel Minify 而不是 Terser。

任何帮助更改 Rails 以使用 Babel Minify plugin 将不胜感激。

【问题讨论】:

    标签: ruby-on-rails webpack babeljs webpacker terser


    【解决方案1】:

    你需要在你想使用 Babel Minify 的环境中进行更改。

    如果是用于生产环境,您的config/webpack/production.js 需要类似于:

    process.env.NODE_ENV = process.env.NODE_ENV || 'production'
    const environment = require('./environment')
    const BabelMinifyPlugin = require('babel-minify-webpack-plugin')
    
    environment.config.optimization.minimizer = [ new BabelMinifyPlugin() ]
    
    module.exports = environment.toWebpackConfig()
    

    这假设您在 package.json 文件中添加了 babel-minify-webpack-plugin 作为依赖项。

    如果您想尝试禁用 collapse_vars,就像选项 3 中的 linked article 指出的那样,您的配置文件应该类似于:

    process.env.NODE_ENV = process.env.NODE_ENV || 'production'
    const environment = require('./environment')
    const UglifyJSPlugin = require("uglifyjs-webpack-plugin")
    
    environment.config.optimization.minimizer = [
      new UglifyJSPlugin({
        uglifyOptions: {
          collapse_vars: false
        }
      })
    ]
    
    module.exports = environment.toWebpackConfig()
    

    这假设您在 package.json 文件中添加了 uglifyjs-webpack-plugin 作为依赖项。

    【讨论】:

      【解决方案2】:

      我也遇到了 erb-loader 的问题。在comment 中找到了解决方案。 erb-loader 和 spring 交互存在一些问题,导致冻结。 要修复它,只需添加

      env:        {
          ...process.env,
          DISABLE_SPRING: 1,
        }
      

      到 erb-loader config(config/webpack/loaders/erb.js) 中的选项,所以整个配置如下:

      module.exports = {
        test: /\.erb$/,
        enforce: 'pre',
        exclude: /node_modules/,
        use: [{
          loader: 'rails-erb-loader',
          options: {
            runner: (/^win/.test(process.platform) ? 'ruby ' : '') + 'bin/rails runner',
            env:        {
              ...process.env,
              DISABLE_SPRING: 1,
            },
          }
        }]
      }
      

      【讨论】:

        【解决方案3】:

        我想我可能遇到了与Compiling never completes Rails 5.2, ERB and compile: true 类似的问题。我从我的项目中删除了 erb 加载器,RAILS_ENV=production rake assets:precompile 完成。我也不再收到有关块大小的警告。

        【讨论】:

          猜你喜欢
          • 2018-07-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-10-14
          • 2013-05-08
          • 2014-05-30
          • 1970-01-01
          • 2014-10-12
          相关资源
          最近更新 更多