From c36e8b969f0c83bc0e4ded72c285bbaf939e7813 Mon Sep 17 00:00:00 2001 From: NGPixel Date: Fri, 16 Mar 2018 22:51:56 -0400 Subject: [PATCH] feat: upgrade to webpack 4 --- client/app.js | 2 + dev/webpack/webpack.common.js | 180 ++++++++++++++-------------------- dev/webpack/webpack.dev.js | 6 +- dev/webpack/webpack.prod.js | 33 +------ package.json | 43 ++++---- server/views/master.pug | 3 - yarn.lock | Bin 381414 -> 436803 bytes 7 files changed, 108 insertions(+), 159 deletions(-) diff --git a/client/app.js b/client/app.js index 28f5159b..ce3c802d 100644 --- a/client/app.js +++ b/client/app.js @@ -57,6 +57,8 @@ window.graphQL = new ApolloClient({ // Initialize Vue Modules // ==================================== +Vue.config.productionTip = false + Vue.use(VueRouter) Vue.use(VueApollo) Vue.use(VueClipboards) diff --git a/dev/webpack/webpack.common.js b/dev/webpack/webpack.common.js index 213e286e..f06c98d5 100644 --- a/dev/webpack/webpack.common.js +++ b/dev/webpack/webpack.common.js @@ -3,8 +3,7 @@ const fs = require('fs-extra') const webpack = require('webpack') const CopyWebpackPlugin = require('copy-webpack-plugin') -const ExtractTextPlugin = require('extract-text-webpack-plugin') -const NameAllModulesPlugin = require('name-all-modules-plugin') +const MiniCssExtractPlugin = require('mini-css-extract-plugin') const babelConfig = fs.readJsonSync(path.join(process.cwd(), '.babelrc')) const postCSSConfig = { @@ -25,7 +24,8 @@ module.exports = { path: path.join(process.cwd(), 'assets'), publicPath: '/', filename: 'js/[name].js', - chunkFilename: 'js/[name].chunk.js' + chunkFilename: 'js/[name].chunk.js', + globalObject: 'this' }, module: { rules: [ @@ -51,12 +51,8 @@ module.exports = { { test: /\.css$/, use: [ - { - loader: 'style-loader' - }, - { - loader: 'css-loader' - }, + MiniCssExtractPlugin.loader, + 'css-loader', { loader: 'postcss-loader', options: postCSSConfig @@ -65,96 +61,70 @@ module.exports = { }, { test: /\.scss$/, - use: ExtractTextPlugin.extract({ - fallback: 'style-loader', - use: [ - { - loader: 'cache-loader', - options: { - cacheDirectory: cacheDir - } - }, - { - loader: 'css-loader' - }, - { - loader: 'postcss-loader', - options: postCSSConfig - }, - { - loader: 'sass-loader', - options: { - sourceMap: false - } + use: [ + 'style-loader', + MiniCssExtractPlugin.loader, + 'css-loader', + { + loader: 'postcss-loader', + options: postCSSConfig + }, + { + loader: 'sass-loader', + options: { + sourceMap: false } - ] - }) + } + ] }, { test: /\.styl$/, - use: ExtractTextPlugin.extract({ - fallback: 'style-loader', - use: [ - { - loader: 'cache-loader', - options: { - cacheDirectory: cacheDir - } - }, - { - loader: 'css-loader' - }, - { - loader: 'postcss-loader', - options: postCSSConfig - }, - { - loader: 'stylus-loader' - } - ] - }) + use: [ + 'style-loader', + MiniCssExtractPlugin.loader, + 'css-loader', + { + loader: 'postcss-loader', + options: postCSSConfig + }, + 'stylus-loader' + ] }, { test: /\.vue$/, loader: 'vue-loader', options: { loaders: { - css: ExtractTextPlugin.extract({ - fallback: 'vue-style-loader', - use: [ - { - loader: 'css-loader' - }, - { - loader: 'postcss-loader', - options: postCSSConfig + css: [ + 'vue-style-loader', + MiniCssExtractPlugin.loader, + 'css-loader', + { + loader: 'postcss-loader', + options: postCSSConfig + } + ], + scss: [ + 'vue-style-loader', + MiniCssExtractPlugin.loader, + 'css-loader', + { + loader: 'postcss-loader', + options: postCSSConfig + }, + { + loader: 'sass-loader', + options: { + sourceMap: false } - ] - }), - scss: ExtractTextPlugin.extract({ - fallback: 'vue-style-loader', - use: [ - { - loader: 'css-loader' - }, - { - loader: 'postcss-loader', - options: postCSSConfig - }, - { - loader: 'sass-loader', - options: { - sourceMap: false - } - }, - { - loader: 'sass-resources-loader', - options: { - resources: path.join(process.cwd(), '/client/scss/global.scss') - } + }, + { + loader: 'sass-resources-loader', + options: { + resources: path.join(process.cwd(), '/client/scss/global.scss') } - ] - }), + } + ], js: [ { loader: 'cache-loader', @@ -223,26 +193,22 @@ module.exports = { ], { }), - new webpack.NamedModulesPlugin(), - new webpack.NamedChunksPlugin((chunk) => { - if (chunk.name) { - return chunk.name - } - return chunk.modules.map(m => path.relative(m.context, m.request)).join('_') - }), - new webpack.optimize.CommonsChunkPlugin({ - name: 'vendor', - minChunks(module) { - return module.context && module.context.includes('node_modules') - } - }), - new webpack.optimize.CommonsChunkPlugin({ - name: 'runtime', - minChunks: Infinity - }), - new NameAllModulesPlugin() + new MiniCssExtractPlugin({ + filename: 'css/bundle.css', + chunkFilename: 'css/[name].chunk.css' + }) ], + optimization: { + namedModules: true, + splitChunks: { + name: 'vendor', + minChunks: 2 + }, + noEmitOnErrors: true, + concatenateModules: true + }, resolve: { + mainFields: ['browser', 'main', 'module'], symlinks: true, alias: { '@': path.join(process.cwd(), 'client'), @@ -265,5 +231,9 @@ module.exports = { node: { fs: 'empty' }, + stats: { + children: false, + entrypoints: false + }, target: 'web' } diff --git a/dev/webpack/webpack.dev.js b/dev/webpack/webpack.dev.js index 3dea6c0f..825fc611 100644 --- a/dev/webpack/webpack.dev.js +++ b/dev/webpack/webpack.dev.js @@ -1,13 +1,13 @@ const webpack = require('webpack') const merge = require('webpack-merge') -const ExtractTextPlugin = require('extract-text-webpack-plugin') const WriteFilePlugin = require('write-file-webpack-plugin') const SimpleProgressWebpackPlugin = require('simple-progress-webpack-plugin') const common = require('./webpack.common.js') module.exports = merge(common, { + mode: 'development', entry: { client: ['./client/index.js', 'webpack-hot-middleware/client'] }, @@ -19,9 +19,9 @@ module.exports = merge(common, { format: 'compact' }), new webpack.DefinePlugin({ - 'process.env.NODE_ENV': JSON.stringify('development') + 'process.env.NODE_ENV': JSON.stringify('development'), + '__REACT_DEVTOOLS_GLOBAL_HOOK__': '({ isDisabled: true })' }), - new ExtractTextPlugin({ disable: true }), new WriteFilePlugin(), new webpack.HotModuleReplacementPlugin(), new webpack.WatchIgnorePlugin([ diff --git a/dev/webpack/webpack.prod.js b/dev/webpack/webpack.prod.js index 47d8dfc5..ab82a4e1 100644 --- a/dev/webpack/webpack.prod.js +++ b/dev/webpack/webpack.prod.js @@ -1,18 +1,15 @@ const webpack = require('webpack') const merge = require('webpack-merge') -const path = require('path') const CleanWebpackPlugin = require('clean-webpack-plugin') -const UglifyJSPlugin = require('uglifyjs-webpack-plugin') -const ExtractTextPlugin = require('extract-text-webpack-plugin') const OfflinePlugin = require('offline-plugin') -const DuplicatePackageCheckerPlugin = require('duplicate-package-checker-webpack-plugin') const SimpleProgressWebpackPlugin = require('simple-progress-webpack-plugin') const OptimizeCssAssetsPlugin = require('optimize-css-assets-webpack-plugin') const common = require('./webpack.common.js') module.exports = merge(common, { + mode: 'production', module: { rules: [] }, @@ -29,28 +26,21 @@ module.exports = merge(common, { root: process.cwd(), verbose: false }), - new UglifyJSPlugin({ - cache: path.join(process.cwd(), '.webpack-cache/uglify'), - parallel: true - }), new webpack.DefinePlugin({ 'process.env.NODE_ENV': JSON.stringify('production') }), - new ExtractTextPlugin({ - filename: 'css/bundle.css', - allChunks: true - }), new OptimizeCssAssetsPlugin({ cssProcessorOptions: { discardComments: { removeAll: true } }, canPrint: true }), new OfflinePlugin({ + ServiceWorker: { + minify: false + }, publicPath: '/', externals: ['/'], caches: { main: [ - 'js/runtime.js', - 'js/vendor.js', 'js/client.js' ], additional: [ @@ -61,19 +51,6 @@ module.exports = merge(common, { ] }, safeToUseOptionalCaches: true - }), - new DuplicatePackageCheckerPlugin(), - // Disable Extract Text Plugin stats: - { - apply(compiler) { - compiler.plugin('done', stats => { - if (Array.isArray(stats.compilation.children)) { - stats.compilation.children = stats.compilation.children.filter(child => { - return child.name.indexOf('extract-text-webpack-plugin') !== 0 - }) - } - }) - } - } + }) ] }) diff --git a/package.json b/package.json index e5dd53bc..4e6aac27 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ "bcryptjs-then": "1.0.1", "bluebird": "3.5.1", "body-parser": "1.18.2", - "bugsnag": "2.3.0", + "bugsnag": "2.3.1", "bull": "3.3.10", "cheerio": "1.0.0-rc.2", "child-process-promise": "2.2.1", @@ -56,8 +56,8 @@ "dependency-graph": "0.7.0", "diff2html": "2.3.3", "dotize": "^0.2.0", - "execa": "0.9.0", - "express": "4.16.2", + "execa": "0.10.0", + "express": "4.16.3", "express-brute": "1.0.1", "express-brute-redis": "0.0.1", "express-session": "1.15.6", @@ -65,10 +65,10 @@ "filesize.js": "1.0.2", "follow-redirects": "1.4.1", "fs-extra": "5.0.0", - "graphql": "0.13.1", + "graphql": "0.13.2", "graphql-list-fields": "2.0.1", - "graphql-tools": "2.21.0", - "i18next": "10.5.0", + "graphql-tools": "2.23.1", + "i18next": "10.5.1", "i18next-express-middleware": "1.1.1", "i18next-localstorage-cache": "1.1.1", "i18next-node-fs-backend": "1.0.0", @@ -124,11 +124,11 @@ "raven": "2.4.2", "read-chunk": "2.1.0", "remove-markdown": "0.2.2", - "request": "2.83.0", + "request": "2.85.0", "request-promise": "4.2.2", "scim-query-filter-parser": "1.1.0", "semver": "5.5.0", - "sequelize": "4.36.0", + "sequelize": "4.37.1", "serve-favicon": "2.4.5", "uuid": "3.2.1", "validator": "9.4.1", @@ -138,6 +138,7 @@ }, "devDependencies": { "@panter/vue-i18next": "0.9.1", + "@vue/cli": "3.0.0-beta.6", "apollo-client-preset": "1.0.8", "apollo-fetch": "0.7.0", "apollo-link-batch-http": "1.2.1", @@ -145,7 +146,7 @@ "babel-cli": "6.26.0", "babel-core": "6.26.0", "babel-eslint": "8.2.2", - "babel-jest": "22.4.1", + "babel-jest": "23.0.0-alpha.0", "babel-loader": "7.1.4", "babel-plugin-graphql-tag": "1.5.0", "babel-plugin-lodash": "3.3.2", @@ -157,12 +158,12 @@ "brace": "0.11.1", "cache-loader": "1.2.2", "clean-webpack-plugin": "0.1.19", - "colors": "1.2.0", + "colors": "1.2.1", "copy-webpack-plugin": "4.5.1", - "css-loader": "0.28.10", + "css-loader": "0.28.11", "cssnano": "4.0.0-rc.2", "duplicate-package-checker-webpack-plugin": "2.1.0", - "eslint": "4.18.2", + "eslint": "4.19.0", "eslint-config-requarks": "1.0.7", "eslint-config-standard": "11.0.0", "eslint-plugin-import": "2.9.0", @@ -181,10 +182,11 @@ "jest-junit": "3.6.0", "js-cookie": "2.2.0", "lodash-webpack-plugin": "0.11.4", + "mini-css-extract-plugin": "0.2.0", "name-all-modules-plugin": "1.0.1", "node-sass": "4.7.2", "offline-plugin": "4.9.0", - "optimize-css-assets-webpack-plugin": "3.2.0", + "optimize-css-assets-webpack-plugin": "4.0.0", "postcss-flexbugs-fixes": "3.3.0", "postcss-flexibility": "2.0.0", "postcss-loader": "2.1.1", @@ -200,10 +202,10 @@ "stylus": "0.54.5", "stylus-loader": "3.0.2", "twemoji-awesome": "1.0.6", - "uglifyjs-webpack-plugin": "1.2.3", + "uglifyjs-webpack-plugin": "1.2.4", "vee-validate": "2.0.5", "velocity-animate": "1.5.1", - "vue": "2.5.15", + "vue": "2.5.16", "vue-apollo": "3.0.0-beta.5", "vue-clipboards": "1.2.2", "vue-codemirror": "4.0.3", @@ -212,13 +214,14 @@ "vue-material-design-icons": "1.2.1", "vue-router": "3.0.1", "vue-simple-breakpoints": "1.0.3", - "vue-template-compiler": "2.5.15", - "vuetify": "1.0.6", + "vue-template-compiler": "2.5.16", + "vuetify": "1.0.8", "vuex": "3.0.1", - "vuex-persistedstate": "2.4.2", - "webpack": "3.11.0", + "vuex-persistedstate": "2.5.1", + "webpack": "4.1.1", "webpack-bundle-analyzer": "2.11.1", - "webpack-dev-middleware": "2.0.3", + "webpack-cli": "2.0.12", + "webpack-dev-middleware": "3.0.1", "webpack-hot-middleware": "2.21.2", "webpack-merge": "4.1.2", "whatwg-fetch": "2.0.3", diff --git a/server/views/master.pug b/server/views/master.pug index 791c6040..25c95c2e 100644 --- a/server/views/master.pug +++ b/server/views/master.pug @@ -25,11 +25,8 @@ html link(type='text/css', rel='stylesheet', href='/css/bundle.css') link(type='text/css', rel='stylesheet', href='https://fonts.googleapis.com/icon?family=Roboto:400,500,700|Source+Code+Pro:400,700|Material+Icons') link(type='text/css', rel='stylesheet', href='https://cdnjs.cloudflare.com/ajax/libs/material-design-iconic-font/2.2.0/css/material-design-iconic-font.min.css') - //- JS - script(type='text/javascript', src='/js/runtime.js') - script(type='text/javascript', src='/js/vendor.js') script(type='text/javascript', src='/js/client.js') block head diff --git a/yarn.lock b/yarn.lock index 31f8c15007484ed57456c44fe08606758ee12466..b48c89e05d7aa54512f10a7fbeb57d3043e17b00 100644 GIT binary patch delta 36380 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 delta 6311 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 ec