webpack.base.conf.js 3.41 KB
var path = require('path');
var config = require('../config');
var utils = require('./utils');
var projectRoot = path.resolve(__dirname, '../');
var webpack = require('webpack');

var env = process.env.NODE_ENV
// check env & config/index.js to decide weither to enable CSS Sourcemaps for the
// various preprocessor loaders added to vue-loader at the end of this file
var cssSourceMapDev = (env === 'development' && config.dev.cssSourceMap)
var cssSourceMapProd = (env === 'production' && config.build.productionSourceMap)
var useCssSourceMap = cssSourceMapDev || cssSourceMapProd

module.exports = {
  entry: {
    main : config.build.entry,
  },
  output: {
    path: config.build.assetsRoot,
    publicPath: process.env.NODE_ENV === 'production' ? config.build.assetsPublicPath : config.dev.assetsPublicPath,
    filename: '[name].js'
  },
  resolve: {
    extensions: ['', '.js', '.vue'],
    fallback: [path.join(__dirname, '../node_modules')],
    alias: {
      'vue$': 'vue/dist/vue.common.js',
      'src': path.resolve(__dirname, '../src'), 
      'assets': path.resolve(__dirname, '../src/assets'),
      'components': path.resolve(__dirname, '../src/components')
    },
    modulesDirectories: ["web_modules", "node_modules", "bower_components"],
  },
  resolveLoader: {
    fallback: [path.join(__dirname, '../node_modules')]
  },
  module: {
    preLoaders: [
      // {
      //   test: /\.vue$/,
      //   loader: 'eslint',
      //   include: projectRoot,
      //   exclude: /node_modules/
      // },
      // {
      //   test: /\.js$/,
      //   loader: 'babel-loader!eslint-loader',
      //   include: projectRoot,
      //   exclude: /node_modules/
      // }
    ],
    loaders: [
      { test: /\.js$/, loader: 'babel',include: projectRoot, exclude: /node_modules/ },
      { test: /\.json$/, loader: 'json' },
      // less语法转化
      { test: /\.less$/, loader: 'style!css!less' },
      // stylus语法转化
      { test: /\.styl$/, loader: 'style-loader!css-loader!stylus-loader' },
      // 编译css并自动添加css前缀
      { test: /\.css$/, loader: "style!css" },

      { test: /\.vue$/, loader: 'vue' },
      { test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
        loader: 'url',
        query: {
          limit: 10000,
          name: utils.assetsPath('img/[name].[hash:7].[ext]')
        }
      },
      {
        test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
        loader: 'url',
        query: {
          limit: 10000,
          name: utils.assetsPath('fonts/[name].[hash:7].[ext]')
        }
      }
    ]
  },
  eslint: {
    // formatter: require('eslint-friendly-formatter')
  },
  vue: {
    //loaders: utils.cssLoaders({ sourceMap: useCssSourceMap }),
     postcss: [
       require('autoprefixer')({
         browsers: ['last 2 versions']
       })
     ],
    loaders: [
      // less语法转化
      { test: /\.less$/, loader: 'vue-style-loader!css-loader!less-loader' },
      // stylus语法转化
      { test: /\.styl$/, loader: 'vue-style-loader!css-loader!stylus-loader' },
      // 编译css并自动添加css前缀
      { test: /\.css$/, loader: "vue-style-loader!css-loader" },
      //  postcss转化
      { test: /\.postcss$/, loader: "vue-style-loader!css-loader" },
      { test: /\.sass$/, loader: "vue-style!css!sass" }
    ] 
  },
  plugins : [
    //new webpack.ResolverPlugin.DirectoryDescriptionFilePlugin(".bower.json", ["main"])
  ],
  babel: {
    presets: ['es2015'],
    plugins: ['transform-runtime']
  }
}