Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Webpack uglify doesn't work with trumbowyg #7

Open
z-george-ma opened this issue Jul 24, 2017 · 2 comments
Open

Webpack uglify doesn't work with trumbowyg #7

z-george-ma opened this issue Jul 24, 2017 · 2 comments

Comments

@z-george-ma
Copy link

z-george-ma commented Jul 24, 2017

We use trumbowyg + webpack with the following configuration

Preview.js

import React from 'react';
import icons from "trumbowyg/dist/ui/icons.svg"
import Trumbowyg from 'react-trumbowyg'

export class Preview extends React.Component {
  constructor(props, context) {
    super(props, context);

    this.options = [
      'btnGrp-semantic',
      ['link'],
      'btnGrp-justify',
      'btnGrp-lists'
    ];
  }

  componentDidMount() {
  }

  render() {
    return (
      <Trumbowyg 
        id='email'
        buttons={this.options}
        data={this.props.htmlBody}
        onChange={this.props.onChange}
        svgIconsPath={icons}
      />
    )
  }
}

webpack.conf.js

const GLOBALS = {
  'process.env.NODE_ENV': JSON.stringify('production'),
  __DEV__: false
};

export default {
  resolve: {
    extensions: ['', '.js', '.jsx']
  },
  debug: true,
  devtool: 'source-map', // more info:https://webpack.github.io/docs/build-performance.html#sourcemaps and https://webpack.github.io/docs/configuration.html#devtool
  noInfo: true, // set to false to see a list of every file being bundled.
  entry: [
    'babel-polyfill',
    './src/index'
  ],
  target: 'web', // necessary per https://webpack.github.io/docs/testing.html#compile-and-test
  output: {
    path: `${__dirname}/dist`,
    publicPath: './',
    filename: '[name].[chunkhash].js'
  },
  plugins: [
    // Hash the files using MD5 so that their names change when the content changes.
    new WebpackMd5Hash(),

    // Optimize the order that items are bundled. This assures the hash is deterministic.
    new webpack.optimize.OccurenceOrderPlugin(),

    // Tells React to build in prod mode. https://facebook.github.io/react/downloads.html
    new webpack.DefinePlugin(GLOBALS),

    // Generate an external css file with a hash in the filename
    new ExtractTextPlugin('[name].[contenthash].css'),

    // Generate HTML file that contains references to generated bundles. See here for how this works: https://github.com/ampedandwired/html-webpack-plugin#basic-usage
    new HtmlWebpackPlugin({
      template: 'src/index.ejs',
      minify: {
        removeComments: true,
        collapseWhitespace: true,
        removeRedundantAttributes: true,
        useShortDoctype: true,
        removeEmptyAttributes: true,
        removeStyleLinkTypeAttributes: true,
        keepClosingSlash: true,
        minifyJS: true,
        minifyCSS: true,
        minifyURLs: true
      },
      inject: true
    }),

    // Eliminate duplicate packages when generating bundle
    new webpack.optimize.DedupePlugin(),

    // Minify JS
    new webpack.optimize.UglifyJsPlugin(),
    
    new webpack.ProvidePlugin({
      $: "jquery",
      jQuery: "jquery"
    }) 
  ],
  module: {
    loaders: [
      {test: /\.jsx?$/, exclude: /node_modules/, loader: 'babel'},
      {test: /\.eot(\?v=\d+.\d+.\d+)?$/, loader: 'url?name=[name].[ext]'},
      {test: /\.woff(2)?(\?v=[0-9]\.[0-9]\.[0-9])?$/, loader: "url?limit=10000&mimetype=application/font-woff&name=[name].[ext]"},
      {test: /\.ttf(\?v=\d+.\d+.\d+)?$/, loader: 'url?limit=10000&mimetype=application/octet-stream&name=[name].[ext]'},
      {test: /\.svg(\?v=\d+.\d+.\d+)?$/, loader: 'url?limit=10000&mimetype=image/svg+xml&name=[name].[ext]'},
      {test: /\.(jpe?g|png|gif)$/i, loader: 'file?name=[name].[ext]'},
      {test: /\.ico$/, loader: 'file?name=[name].[ext]'},
      {test: /(\.css|\.less)$/, loader: ExtractTextPlugin.extract('css?sourceMap!postcss!less?sourceMap')}
    ]
  },
  postcss: ()=> [autoprefixer]
};

The build artefact doesn't work correctly, but commenting out new webpack.optimize.UglifyJsPlugin() works.

@sochix
Copy link
Member

sochix commented Jul 24, 2017

Maybe it doesn't work because UglifyJs spoil the global vars names. Try to change uglufy settings to less aggressive

@mparker11
Copy link

I've had this problem before out of the scope Trumbowyg where Uglify complains that it can't take es6 code. Since then, I switched over to babel-minify-webpack-plugin. I hope that helps.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants