vue-cli+webpack打包配置

Posted 归远

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vue-cli+webpack打包配置相关的知识,希望对你有一定的参考价值。

上一篇说的是 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打包配置的主要内容,如果未能解决你的问题,请参考以下文章

从 vue-cli 到 webpack多入口打包

从 vue-cli 到 webpack多入口打包

webpack+vue-cli项目打包技巧

搭建vue-cli项目和打包项目

vue-cli webpack2项目打包优化

vue-cli脚手架中webpack配置基础文件详解