1. 程式人生 > >vue-cli+webpack打包配置

vue-cli+webpack打包配置

output iat lint creat clu 包含 res client sele

上一篇說的是 webpack打包生成測試和生產版本; 這篇說的這個配置 應該是在打包之前應該配置好的

webpack配置如下:

1. webpack.base.conf.js

入口文件 entry 代碼如下:

entry: {
  app: ‘./src/main.js‘
}

輸出文件 output 代碼如下:

output: {
  path: config.build.assetsRoot,  // 導出目錄的絕對路徑 在項目的根目錄下 會新建dist文件夾
  filename: ‘[name].js‘,  // 導出文件的文件名
  publicPath: process.env.NODE_ENV === ‘production‘
    ? config.build.assetsPublicPath
    : config.dev.assetsPublicPath  
}

整體代碼

‘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);
}
/*
 對於以.js或.vue後綴結尾的文件(在src目錄下或test目錄下的文件),使用eslint進行文件語法檢測。
*/
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 = {
  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‘],

    // 創建import 或 require的別名
    /*
     比如如下文件
     src
       components
         a.vue
       router
         home
           index.vue
      在index.vue裏面,正常引用A組件;如下:
      import A from ‘../../components/a.vue‘;
      如果設置了 alias後,那麽引用的地方可以如下這樣了
      import A from ‘@/components/a.vue‘;
      註意:這裏的 @ 起到了 resolve(‘src‘)路徑的作用了。
    */
    alias: {
      ‘vue$‘: ‘vue/dist/vue.esm.js‘,
      ‘@‘: resolve(‘src‘)
    }
  },
  module: {
    rules: [
      // 在開發環境下 對於以.js或.vue後綴結尾的文件(在src目錄下或test目錄下的文件),使用eslint進行文件語法檢測。
      ...(config.dev.useEslint ? [createLintingRule()] : []),
      {
        test: /\.vue$/,  // vue 文件後綴的
        loader: ‘vue-loader‘, // 使用vue-loader處理
        options: vueLoaderConfig // options是對vue-loader做的額外選項配置 文件配置在 ./vue-loader.conf 內可以查看代碼
      },
      {
        test: /\.js$/, // js文件後綴的
        loader: ‘babel-loader‘, // 使用babel-loader處理
        include: [resolve(‘src‘), resolve(‘test‘)] // 包含src和test的文件夾
      },
      {
        test: /\.(png|jpe?g|gif|svg)(\?.*)?$/, // 處理圖片後綴
        loader: ‘url-loader‘,  // 使用url-loader處理
        options: {
          limit: 10000,  // 圖片小於10000字節時以base64的方式引用
          name: utils.assetsPath(‘img/[name].[hash:7].[ext]‘)  // 文件名為name.7位hash的值.擴展名
        }
      },
      {
        test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/,  // 音頻文件後綴
        loader: ‘url-loader‘,
        options: {
          limit: 10000, // 小於10000字節時的時候處理
          name: utils.assetsPath(‘media/[name].[hash:7].[ext]‘) // 文件名為name.7位hash的值.擴展名
        }
      },
      {
        test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/, // 字體文件
        loader: ‘url-loader‘,
        options: {
          limit: 10000, // 字體文件小於10000字節的時候處理
          name: utils.assetsPath(‘fonts/[name].[hash:7].[ext]‘) // 文件名為name.7位hash的值.擴展名
        }
      }
    ]
  },
  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‘
  }
};

對webpack.base.conf中的 const vueLoaderConfig = require(‘./vue-loader.conf‘);

vue-loader.conf.js 代碼如下:

vue-cli+webpack打包配置