update to webpack 4

This commit is contained in:
Rich Harris
2018-03-04 12:02:35 -05:00
parent 5507bf67b1
commit e0090de549
5 changed files with 21 additions and 47 deletions

1
.gitignore vendored
View File

@@ -5,4 +5,5 @@ yarn.lock
cypress/screenshots cypress/screenshots
templates/.* templates/.*
export export
build
app/manifest app/manifest

View File

@@ -23,9 +23,9 @@
"sapper": "^0.7.0", "sapper": "^0.7.0",
"serve-static": "^1.13.1", "serve-static": "^1.13.1",
"style-loader": "^0.20.1", "style-loader": "^0.20.1",
"svelte": "^1.51.1", "svelte": "^1.56.0",
"svelte-loader": "^2.3.3", "svelte-loader": "^2.3.3",
"uglifyjs-webpack-plugin": "^1.1.5", "uglifyjs-webpack-plugin": "^1.1.5",
"webpack": "^3.10.0" "webpack": "^4.1.0"
} }
} }

View File

@@ -1,15 +1,15 @@
const webpack = require('webpack'); const webpack = require('webpack');
const config = require('sapper/webpack/config.js'); const config = require('sapper/webpack/config.js');
const ExtractTextPlugin = require('extract-text-webpack-plugin');
const UglifyJSPlugin = require('uglifyjs-webpack-plugin'); const UglifyJSPlugin = require('uglifyjs-webpack-plugin');
const isDev = config.dev; const mode = process.env.NODE_ENV;
const isDev = mode === 'development';
module.exports = { module.exports = {
entry: config.client.entry(), entry: config.client.entry(),
output: config.client.output(), output: config.client.output(),
resolve: { resolve: {
extensions: ['.js', '.html'] extensions: ['.js', '.json', '.html']
}, },
module: { module: {
rules: [ rules: [
@@ -20,41 +20,16 @@ module.exports = {
loader: 'svelte-loader', loader: 'svelte-loader',
options: { options: {
hydratable: true, hydratable: true,
emitCss: !isDev,
cascade: false, cascade: false,
store: true, store: true
hotReload: true
} }
} }
},
isDev && {
test: /\.css$/,
use: [
{ loader: 'style-loader' },
{ loader: 'css-loader' }
]
},
!isDev && {
test: /\.css$/,
use: ExtractTextPlugin.extract({
fallback: 'style-loader',
use: [{ loader: 'css-loader', options: { sourceMap:isDev } }]
})
} }
].filter(Boolean) ]
}, },
mode,
plugins: [ plugins: [
new webpack.optimize.CommonsChunkPlugin({ isDev && new webpack.HotModuleReplacementPlugin()
minChunks: 2, ].filter(Boolean),
async: false,
children: true
})
].concat(isDev ? [
new webpack.HotModuleReplacementPlugin()
] : [
new ExtractTextPlugin('main.css'),
new webpack.optimize.ModuleConcatenationPlugin(),
new UglifyJSPlugin()
]).filter(Boolean),
devtool: isDev && 'inline-source-map' devtool: isDev && 'inline-source-map'
}; };

View File

@@ -2,14 +2,16 @@ const config = require('sapper/webpack/config.js');
const webpack = require('webpack'); const webpack = require('webpack');
const ExtractTextPlugin = require("extract-text-webpack-plugin"); const ExtractTextPlugin = require("extract-text-webpack-plugin");
const UglifyJSPlugin = require('uglifyjs-webpack-plugin'); const UglifyJSPlugin = require('uglifyjs-webpack-plugin');
const pkg = require('../package.json');
module.exports = { module.exports = {
entry: config.server.entry(), entry: config.server.entry(),
output: config.server.output(), output: config.server.output(),
target: 'node', target: 'node',
resolve: { resolve: {
extensions: ['.js', '.html', '.json'] extensions: ['.js', '.json', '.html']
}, },
externals: Object.keys(pkg.dependencies),
module: { module: {
rules: [ rules: [
{ {
@@ -26,5 +28,9 @@ module.exports = {
} }
} }
] ]
},
mode: process.env.NODE_ENV,
performance: {
hints: false // it doesn't matter if server.js is large
} }
}; };

View File

@@ -3,15 +3,7 @@ const config = require('sapper/webpack/config.js');
const webpack = require('webpack'); const webpack = require('webpack');
module.exports = { module.exports = {
entry: { entry: config.serviceworker.entry(),
'service-worker': './app/service-worker.js' output: config.serviceworker.output(),
}, mode: process.env.NODE_ENV
output: {
path: path.resolve(`.sapper`),
filename: '[name].js',
chunkFilename: '[name].[id].[hash].js'
},
plugins: [
!config.dev && new webpack.optimize.ModuleConcatenationPlugin()
].filter(Boolean)
}; };