2017-08-24 2 views
2

Ich benutze Webpack um Module zu bündeln, die in ES6 geschrieben sind. Alle wurden bearbeitet, bis ich json-immutable plugin hinzugefügt habe. Es erforderlich ist json-stream-stringify und es gibt eine Klasse:webpack 2 uglify plugin ES6

class JSONStreamify extends CoStream {...} 
module.exports = function(obj, replacer) { 
    return new JSONStreamify(obj, replacer); 
}; 

webpack gut funktioniert, aber nicht monify Dateien, weil uglify throw Fehler

Unexpected token: name (JSONStreamify)

I https://github.com/webpack-contrib/uglifyjs-webpack-plugin hier Informationen über Modul gefunden. Ich habe installiert und hinzugefügt ecma Unterstützung, aber ich habe immer noch die gleichen Fehler. Ich habe Trie entfernt Ich habe versucht, add exclude node_modules, aber ohne Ergebnisse.

Mein webpack.config.js ist

const path = require('path'); 
const webpack = require('webpack'); 
const UglifyJSPlugin = require('uglifyjs-webpack-plugin'); 
module.exports = { 
    entry: { 
    backend: './src/backend.js', 
    frontend: './src/frontend.js', 
    }, 
    output: { 
    path: path.resolve(__dirname,'./dist'), 
    filename: '[name].sakui.min.js' 
    }, 
    externals: { 
    'jQuery':'jQuery', 
    'Foundation':'Foundation', 
    'react': 'React', 
    'react-dom': 'ReactDOM', 
    'redux': 'Redux', 
    'react-redux': 'ReactRedux', 
    'immutable': 'Immutable', 
    'lodash': '_', 
    '_': '_' 
    }, 
    module: { 
    rules: [ 
     { 
     test: /\.js$/, 
     exclude: /node_modules/, 
     use: { 
      loader: 'babel-loader', 
      options: { 
      "only": "src/**", 
      "presets": [ 
       "env", 
       "react", 
       "es2017", 
       "stage-3" 
      ], 
      "plugins": [["transform-class-properties", { "spec": true }],"transform-decorators-legacy","minify-simplify"], 
      "babelrc": false 
      } 
     } 
     } 
    ] 
    }, 
    plugins: [ 
    new UglifyJSPlugin({ 
     ecma: 6 
    }) 
    ] 
} 

Irgendwelche Hinweise, wie ich dieses Problem lösen kann? Vielleicht ein externes Tool, um Dateien nach dem Webpack zu minimieren?

+1

Uglify versteht ES6 nicht sehr gut, .. Sie haben 2 Optionen, übertragen zu ES5 & Uglify, oder verwenden Sie nicht Uglify und verwenden Sie Babels eigenen Uglifier. (Babili) – Keith

+0

kann ich für die Webpack-Option hinzufügen, um nur node_modules nach ES5 zu übertragen? (wird prüfen, ob babili gut aussieht) – jaroApp

+0

BTW Ich entferne das Plugin von meiner Webpack-Datei und habe immer noch diesen Fehler. Sollte ich einen Cache löschen? Ich sehe, was es richtig verwendet webpack.config Datei – jaroApp

Antwort

0

Lösung:

eine Art und Weise, was ich gefunden ist transpile alle mit node_modules von babel zu ES5 und es funktioniert.

mein webpack.config.js

const path = require('path'); 
const webpack = require('webpack'); 
const UglifyJSPlugin = require('uglifyjs-webpack-plugin'); 
module.exports = { 
    entry: { 
    backend: './src/backend.js', 
    frontend: './src/frontend.js', 
    }, 
    output: { 
    path: path.resolve(__dirname,'./dist'), 
    filename: '[name].sakui.min.js' 
    }, 
    externals: { 
    'jQuery':'jQuery', 
    'Foundation':'Foundation', 
    'react': 'React', 
    'react-dom': 'ReactDOM', 
    'redux': 'Redux', 
    'react-redux': 'ReactRedux', 
    'immutable': 'Immutable', 
    'lodash': '_', 
    '_': '_' 
    }, 
    module: { 
    rules: [ 
     { 
     test: /\.js$/, 
     use: { 
      loader: 'babel-loader', 
      options: { 
      "presets": [ 
       "env", 
       "react", 
       "es2017", 
       "stage-3" 
      ], 
      "plugins": [["transform-class-properties", { "spec": true }],"transform-decorators-legacy"], 
      "babelrc": false 
      } 
     } 
     } 
    ] 
    }, 
    plugins: [ 
    new UglifyJSPlugin() 
    ] 
} 

Vielleicht wird nützlich für jemanden.