Commit daae797e authored by Evan You's avatar Evan You

adjust build

parent f4312ca4
const path = require('path') const path = require('path')
const webpack = require('webpack')
const isProd = process.env.NODE_ENV === 'production'
module.exports = { module.exports = {
devtool: '#source-map', devtool: '#source-map',
entry: './src/client-entry.js', entry: {
app: './src/client-entry.js',
vendor: ['vue', 'vue-router', 'vuex', 'firebase', 'lru-cache']
},
output: { output: {
path: path.resolve(__dirname, './dist'), path: path.resolve(__dirname, '../dist'),
publicPath: '/dist/', publicPath: '/dist/',
filename: 'client-bundle.js' filename: 'client-bundle.js'
}, },
resolveLoader: { resolveLoader: {
root: path.join(__dirname, 'node_modules'), root: path.join(__dirname, '../node_modules'),
}, },
module: { module: {
loaders: [ loaders: [
...@@ -32,37 +33,5 @@ module.exports = { ...@@ -32,37 +33,5 @@ module.exports = {
} }
} }
] ]
},
devServer: {
historyApiFallback: true,
noInfo: true
},
plugins: [
new webpack.optimize.OccurrenceOrderPlugin(),
new webpack.DefinePlugin({
'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || 'development')
})
]
}
if (process.env.NODE_ENV === 'production' && process.env.VUE_ENV !== 'server') {
const ExtractTextPlugin = require('extract-text-webpack-plugin')
module.exports.vue = {
loaders: {
css: ExtractTextPlugin.extract({
loader: "css-loader",
fallbackLoader: "vue-style-loader"
})
}
}
module.exports.plugins = module.exports.plugins.concat([
new ExtractTextPlugin('styles.css'),
new webpack.optimize.UglifyJsPlugin({
compress: {
warnings: false
} }
})
])
} }
const base = require('./webpack.base.config')
const webpack = require('webpack')
const isProd = process.env.NODE_ENV === 'production'
const config = Object.assign({}, base, {
plugins: [
new webpack.DefinePlugin({
'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || 'development')
}),
new webpack.optimize.CommonsChunkPlugin({
name: 'vendor',
filename: 'client-vendor-bundle.js'
})
]
})
if (isProd) {
const ExtractTextPlugin = require('extract-text-webpack-plugin')
config.vue = {
loaders: {
css: ExtractTextPlugin.extract({
loader: "css-loader",
fallbackLoader: "vue-style-loader"
})
}
}
config.plugins.push(
new ExtractTextPlugin('styles.css'),
new webpack.LoaderOptionsPlugin({
minimize: true
}),
// minify
new webpack.optimize.UglifyJsPlugin({
compress: {
warnings: false
}
})
)
}
module.exports = config
const webpack = require('webpack') const webpack = require('webpack')
const merge = require('webpack-merge') const base = require('./webpack.base.config')
const webpackConfig = require('./webpack.client.config')
module.exports = merge(webpackConfig, { module.exports = Object.assign({}, base, {
target: 'node', target: 'node',
devtool: null,
entry: './src/server-entry.js', entry: './src/server-entry.js',
output: { output: Object.assign({}, base.output, {
filename: 'server-bundle.js', filename: 'server-bundle.js',
libraryTarget: 'commonjs2' libraryTarget: 'commonjs2'
}, }),
externals: { externals: {
firebase: true, firebase: true,
'lru-cache': true 'lru-cache': true
......
...@@ -7,8 +7,8 @@ ...@@ -7,8 +7,8 @@
"dev": "node server", "dev": "node server",
"start": "NODE_ENV=production node server", "start": "NODE_ENV=production node server",
"build": "npm run build:client && npm run build:server", "build": "npm run build:client && npm run build:server",
"build:client": "NODE_ENV=production webpack --config webpack.client.config.js --progress --hide-modules", "build:client": "NODE_ENV=production webpack --config build/webpack.client.config.js --progress --hide-modules",
"build:server": "NODE_ENV=production webpack --config webpack.server.config.js --progress --hide-modules" "build:server": "NODE_ENV=production webpack --config build/webpack.server.config.js --progress --hide-modules"
}, },
"dependencies": { "dependencies": {
"es6-promise": "^3.2.1", "es6-promise": "^3.2.1",
...@@ -33,7 +33,6 @@ ...@@ -33,7 +33,6 @@
"vue-loader": "^9.2.2", "vue-loader": "^9.2.2",
"webpack": "^2.1.0-beta.20", "webpack": "^2.1.0-beta.20",
"webpack-dev-middleware": "^1.6.1", "webpack-dev-middleware": "^1.6.1",
"webpack-hot-middleware": "^2.12.2", "webpack-hot-middleware": "^2.12.2"
"webpack-merge": "^0.14.1"
} }
} }
...@@ -19,10 +19,9 @@ const app = express() ...@@ -19,10 +19,9 @@ const app = express()
if (process.env.NODE_ENV !== 'production') { if (process.env.NODE_ENV !== 'production') {
const webpack = require('webpack') const webpack = require('webpack')
const clientConfig = require('./webpack.client.config') const clientConfig = require('./build/webpack.client.config')
const serverConfig = require('./webpack.server.config')
clientConfig.entry = ['webpack-hot-middleware/client', clientConfig.entry] clientConfig.entry.app = ['webpack-hot-middleware/client', clientConfig.entry.app]
clientConfig.plugins.push( clientConfig.plugins.push(
new webpack.HotModuleReplacementPlugin(), new webpack.HotModuleReplacementPlugin(),
new webpack.NoErrorsPlugin() new webpack.NoErrorsPlugin()
...@@ -40,6 +39,7 @@ if (process.env.NODE_ENV !== 'production') { ...@@ -40,6 +39,7 @@ if (process.env.NODE_ENV !== 'production') {
// watch and update server renderer // watch and update server renderer
const MFS = require('memory-fs') const MFS = require('memory-fs')
const serverConfig = require('./build/webpack.server.config')
const serverCompiler = webpack(serverConfig) const serverCompiler = webpack(serverConfig)
const mfs = new MFS() const mfs = new MFS()
serverCompiler.outputFileSystem = mfs serverCompiler.outputFileSystem = mfs
...@@ -89,7 +89,11 @@ app.get('*', (req, res) => { ...@@ -89,7 +89,11 @@ app.get('*', (req, res) => {
}) })
renderStream.on('end', () => { renderStream.on('end', () => {
res.end(`<script src="/dist/client-bundle.js"></script></body></html>`) res.end(`
<script src="/dist/client-vendor-bundle.js"></script>
<script src="/dist/client-bundle.js"></script>
</body></html>`
)
console.log(`whole request: ${Date.now() - s}ms`) console.log(`whole request: ${Date.now() - s}ms`)
}) })
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment