react-trumbowyg
react-trumbowyg copied to clipboard
Webpack uglify doesn't work with trumbowyg
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.
Maybe it doesn't work because UglifyJs spoil the global vars names. Try to change uglufy settings to less aggressive
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.