| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| 'use strict' |
| const path = require('path') |
| const utils = require('./utils') |
| const config = require('../config') |
| const vueLoaderConfig = require('./vue-loader.conf') |
| |
| function resolve(dir) { |
| return path.join(__dirname, '..', dir) |
| } |
| |
| const createLintingRule = () => ({ |
| test: /\.(js|vue)$/, |
| loader: 'eslint-loader', |
| enforce: 'pre', |
| include: [resolve('src'), resolve('test')], |
| options: { |
| formatter: require('eslint-friendly-formatter'), |
| emitWarning: !config.dev.showEslintErrorsInOverlay |
| } |
| }) |
| |
| module.exports = { |
| context: path.resolve(__dirname, '../'), |
| entry: { |
| app: './src/main.js' |
| }, |
| output: { |
| path: config.build.assetsRoot, |
| filename: '[name].js', |
| publicPath: |
| process.env.NODE_ENV === 'production' |
| ? config.build.assetsPublicPath |
| : config.dev.assetsPublicPath |
| }, |
| resolve: { |
| extensions: ['.js', '.vue', '.json'], |
| alias: { |
| vue$: 'vue/dist/vue.esm.js', |
| '@': resolve('src') |
| } |
| }, |
| module: { |
| rules: [ |
| ...(config.dev.useEslint ? [createLintingRule()] : []), |
| { |
| test: /\.vue$/, |
| loader: 'vue-loader', |
| options: vueLoaderConfig |
| }, |
| { |
| test: /\.js$/, |
| loader: 'babel-loader', |
| include: [resolve('src'), resolve('test')] |
| }, |
| { |
| test: /\.svg$/, |
| loader: 'svg-sprite-loader', |
| include: [resolve('src/icons')], |
| options: { |
| symbolId: 'icon-[name]' |
| } |
| }, |
| { |
| test: /\.(png|jpe?g|gif|svg)(\?.*)?$/, |
| loader: 'url-loader', |
| exclude: [resolve('src/icons')], |
| options: { |
| limit: 10000, |
| name: utils.assetsPath('img/[name].[hash:7].[ext]') |
| } |
| }, |
| { |
| test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/, |
| loader: 'url-loader', |
| options: { |
| limit: 10000, |
| name: utils.assetsPath('media/[name].[hash:7].[ext]') |
| } |
| }, |
| { |
| test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/, |
| loader: 'url-loader', |
| options: { |
| limit: 10000, |
| name: utils.assetsPath('fonts/[name].[hash:7].[ext]') |
| } |
| } |
| ] |
| }, |
| node: { |
| // prevent webpack from injecting useless setImmediate polyfill because Vue |
| // source contains it (although only uses it if it's native). |
| setImmediate: false, |
| // prevent webpack from injecting mocks to Node native modules |
| // that does not make sense for the client |
| dgram: 'empty', |
| fs: 'empty', |
| net: 'empty', |
| tls: 'empty', |
| child_process: 'empty' |
| } |
| } |