Nuxt/lib/webpack/base.config.js

80 lines
2.4 KiB
JavaScript
Raw Normal View History

'use strict'
2017-01-11 19:14:59 +00:00
import vueLoaderConfig from './vue-loader.config'
import { defaults } from 'lodash'
import { join } from 'path'
2017-03-16 17:52:38 +00:00
import { isUrl, urlJoin } from '../utils'
2016-11-07 01:34:58 +00:00
/*
|--------------------------------------------------------------------------
| Webpack Shared Config
|
2016-11-18 03:02:43 +00:00
| This is the config which is extended by the server and client
2016-11-07 01:34:58 +00:00
| webpack config files
|--------------------------------------------------------------------------
*/
2017-01-11 19:14:59 +00:00
export default function ({ isClient, isServer }) {
2016-12-09 17:54:17 +00:00
const nodeModulesDir = join(__dirname, '..', 'node_modules')
let config = {
devtool: 'source-map',
entry: {
2017-01-11 21:18:47 +00:00
vendor: ['vue', 'vue-router', 'vue-meta']
},
output: {
2017-03-16 17:52:38 +00:00
publicPath: (isUrl(this.options.build.publicPath) ? this.options.build.publicPath : urlJoin(this.options.router.base, this.options.build.publicPath))
},
2016-12-15 17:53:00 +00:00
performance: {
hints: (this.dev ? false : 'warning')
},
resolve: {
2016-12-12 15:30:17 +00:00
extensions: ['.js', '.json', '.vue'],
2016-11-16 16:55:15 +00:00
// Disable for now
2016-11-14 22:59:54 +00:00
alias: {
2016-12-08 06:45:40 +00:00
'~': join(this.srcDir),
'static': join(this.srcDir, 'static'), // use in template with <img src="~static/nuxt.png" />
'~static': join(this.srcDir, 'static'),
'assets': join(this.srcDir, 'assets'), // use in template with <img src="~static/nuxt.png" />
'~assets': join(this.srcDir, 'assets'),
'~plugins': join(this.srcDir, 'plugins'),
'~store': join(this.dir, '.nuxt/store'),
2016-11-24 00:40:04 +00:00
'~router': join(this.dir, '.nuxt/router'),
2016-12-08 06:45:40 +00:00
'~pages': join(this.srcDir, 'pages'),
'~components': join(this.srcDir, 'components')
2016-11-14 22:59:54 +00:00
},
modules: [
nodeModulesDir,
join(this.dir, 'node_modules')
]
},
resolveLoader: {
modules: [
nodeModulesDir,
join(this.dir, 'node_modules')
]
},
module: {
rules: [
{
test: /\.vue$/,
2016-11-14 22:59:54 +00:00
loader: 'vue-loader',
2017-01-09 14:10:22 +00:00
query: vueLoaderConfig.call(this, { isClient, isServer })
},
{
test: /\.js$/,
2016-11-14 22:59:54 +00:00
loader: 'babel-loader',
exclude: /node_modules/,
2016-11-18 09:38:47 +00:00
query: defaults(this.options.build.babel, {
2017-02-17 15:13:51 +00:00
presets: ['vue-app'],
2016-11-18 09:38:47 +00:00
cacheDirectory: !!this.dev
})
2016-11-07 01:34:58 +00:00
}
]
},
plugins: this.options.build.plugins
2016-11-07 01:34:58 +00:00
}
// Add nuxt build loaders (can be configured in nuxt.config.js)
config.module.rules = config.module.rules.concat(this.options.build.loaders)
// Return config
return config
2016-11-07 01:34:58 +00:00
}