vue-cli脚手架-bulid下的配置文件

当使用 Vue.js 开发项目时,经常会使用到 Vue CLI 脚手架工具来初始化项目,并在 build 时自动生成配置文件来进行编译、打包等操作。以下是 Vue CLI 脚手架中 bulid 下的配置文件的详细解析:

1. 配置文件的作用

Vue CLI 脚手架的 build 目录下存放的是一些 webpack 的配置文件,这些配置文件主要用于在生产环境下对代码进行打包、压缩、混淆等处理。这些处理使得项目可以在生产环境下得到更好的性能表现。该目录包含以下配置文件:

  • webpack.base.conf.js: webpack 基础配置文件,主要定义通用配置;
  • webpack.prod.conf.js: webpack 生产环境配置文件,主要定义生产环境下的打包配置。

2. webpack.base.conf.js

webpack.base.conf.js 是 Vue CLI 脚手架代码打包的基础配置文件,该文件主要定义了项目在开发和打包时通用的配置信息,包括 entry 入口、output 输出、loader 加载器、plugin 插件等。以下是该文件的主要配置项:

2.1 entry

entry 是指项目的入口文件,也就是代码执行的起点。该配置项主要指定了 webpack 如何查找项目中的入口文件,可以是单个文件,也可以是多个文件。示例:

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

以上代码将项目的入口文件指定为 ./src/main.js。

2.2 output

output 是指项目的输出配置,包括输出文件名称、文件夹路径、资源文件公共路径等。主要用于指定打包后的代码输出方式、位置等信息。示例:

output: {
  path: config.build.assetsRoot,
  filename: utils.assetsPath('js/[name].[chunkhash].js'),
  chunkFilename: utils.assetsPath('js/[id].[chunkhash].js'),
  publicPath: process.env.NODE_ENV === 'production'
    ? config.build.assetsPublicPath
    : config.dev.assetsPublicPath
}

以上代码指定 webpack 打包后的输出路径,其中文件名称包含 chunkhash 等信息。

2.3 module

module 配置项用于定义各种文件类型的处理方式,包括图片、CSS、JS 等文件。通过指定不同的 Loader 进行不同类型的文件加载和解析。示例:

module: {
  rules: [
    {
      test: /\.(js|vue)$/,
      loader: 'eslint-loader',
      enforce: 'pre',
      include: [resolve('src'), resolve('test')],
      options: {
        formatter: require('eslint-friendly-formatter')
      }
    },
    {
      test: /\.vue$/,
      loader: 'vue-loader',
      options: vueLoaderConfig
    },
    {
      test: /\.js$/,
      loader: 'babel-loader',
      include: [resolve('src'), resolve('test')]
    },
    {
      test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
      loader: 'url-loader',
      options: {
        limit: 10000,
        name: utils.assetsPath('img/[name].[hash:7].[ext]')
      }
    },
    {
      test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
      loader: 'url-loader',
      options: {
        limit: 10000,
        name: utils.assetsPath('fonts/[name].[hash:7].[ext]')
      }
    },
    {
      test: /\.(scss|sass)$/,
      use: [
        'style-loader',
        'css-loader',
        'sass-loader'
      ]
    }
  ]
}

以上代码指定了 JS、vue、图片、字体、Sass 文件等的加载方式及配置。

2.4 resolve

resolve 和 module 配置项作用相似,也用于配置 webpack 如何处理模块,是一种配置优化方式。resolve 包含 alias、extensions 等属性,需要通过配置找到正确的文件路径。示例:

resolve: {
  extensions: ['.js', '.vue', '.json'],
  alias: {
    'vue$': 'vue/dist/vue.esm.js',
    '@': resolve('src'),
  }
}

以上代码将 vue 模块指向 vue.esm.js 文件,@ 符号代表根目录的 src 目录。

3. webpack.prod.conf.js

webpack.prod.conf.js 是 Vue CLI 脚手架在生产环境下的打包配置文件,包含了 webpack.base.conf.js 中的所有配置信息,同时还具有一些针对生产环境的特殊配置项。以下是该文件的主要配置项:

3.1 entry

entry 配置项与 webpack.base.conf.js 配置项一样,用于定义项目的入口文件。

3.2 output

output 配置项与 webpack.base.conf.js 配置项一样,用于定义项目的输出路径及格式。

3.3 module

module 配置项与 webpack.base.conf.js 配置项一样,用于配置项目中各种文件的处理方式。

3.4 plugins

plugins 是指 webpack 的插件,可用于执行更多的任务,例如压缩、混淆、文件复制等操作。以下是常用的插件:

  • HtmlWebpackPlugin:用于自动生成 index.html 文件,可设置模板文件及加载 CSS、JS 等文件;
  • MiniCssExtractPlugin:用于提取 CSS 代码到外部样式文件中;
  • OptimizeCSSPlugin:用于压缩、合并 CSS 文件;
  • UglifyJsPlugin:用于压缩 JS 代码。

示例:

plugins: [
  // http://vuejs.github.io/vue-loader/en/workflow/production.html
  new webpack.DefinePlugin({
    'process.env': require('../config/prod.env')
  }),
  new UglifyJsPlugin({
    uglifyOptions: {
      compress: {
        warnings: false
      }
    },
    sourceMap: config.build.productionSourceMap,
    parallel: true
  }),
  // extract css into its own file
  new MiniCssExtractPlugin({
    filename: utils.assetsPath('css/[name].[contenthash].css'),
    // Setting the following option to `true` would enable css source maps.
    // This is useful for inspecting errors, but incurs significant performance penalty.
    // In the production build, we actually omit css source maps because you don't need them
    // generate source map for css
    options: {
      sourceMap: config.build.productionSourceMap,
      hmr: process.env.NODE_ENV === 'development'
    }
  }),
  // Compress extracted CSS. We are using this plugin so that possible
  // duplicated CSS from different components can be deduped.
  new OptimizeCSSPlugin({
    cssProcessorOptions: config.build.productionSourceMap
      ? { safe: true, map: { inline: false } }
      : { safe: true }
  }),
  // generate dist index.html with correct asset hash for caching.
  // you can customize output by editing /index.html
  // see https://github.com/ampedandwired/html-webpack-plugin
  new HtmlWebpackPlugin({
    filename: config.build.index,
    template: './index.html',
    inject: true,
    minify: {
      removeComments: true,
      collapseWhitespace: true,
      removeAttributeQuotes: true
      // more options:
      // https://github.com/kangax/html-minifier#options-quick-reference
    },
    // necessary to consistently work with multiple chunks via CommonsChunkPlugin
    chunksSortMode: 'dependency'
  }),
  // keep module.id stable when vendor modules does not change
  new webpack.HashedModuleIdsPlugin(),
  // enable scope hoisting
  new webpack.optimize.ModuleConcatenationPlugin(),
  // split vendor js into its own file
  new webpack.optimize.SplitChunksPlugin({
    name: 'vendor',
    minChunks: function (module) {
      // any required modules inside node_modules are extracted to vendor
      return (
        module.resource &&
        /\.js$/.test(module.resource) &&
        module.resource.indexOf(
          path.join(__dirname, '../node_modules')
        ) === 0
      )
    }
  }),
  ...
]

以上是对 webpack.prod.conf.js 文件主要配置项的详细介绍。

结语

对于一个 Vue CLI 脚手架项目来说,bulid 目录下的配置文件是非常重要的。通过逐个配置 webpack 的相关选项,可以使得我们的项目在生产环境下得到更好的性能表现。如果你想要更加深入地理解 webpack 配置文件的更多内容,可以查看官方文档或相关的书籍和教程。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue-cli脚手架-bulid下的配置文件 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • 前端面试之vue2和vue3的区别有哪些

    下面是“前端面试之vue2和vue3的区别有哪些”的完整攻略。 1. Vue2与Vue3的区别 Vue3相比于Vue2在性能、API以及组合式API等方面做了很多的优化和改进。 1.1 性能 Vue3在渲染性能方面做出了很多的调整,如通过编译器对hr函数进行内联处理、优化模板中的静态内容、通过Fragments(片段)降低内存使用等。同时,Vue3还引入了响…

    Vue 2023年5月29日
    00
  • 详解Vue的options

    当使用Vue框架来开发应用程序时,它使用了一个构造函数来创建Vue的实例。在创建Vue实例时,构造函数需要一个对象参数,这个参数包含了Vue的选项,其中包括了数据、计算属性、模板、组件等等。这里我们就来详细讲解Vue的options。 1. 数据选项 数据选项用于定义应用程序中的数据,这些数据可以在模板中进行显示和修改。通过使用响应式数据机制,在修改数据时,…

    Vue 2023年5月27日
    00
  • 3分钟了解vue数据劫持的原理实现

    以下是 “3分钟了解vue数据劫持的原理实现”的完整攻略: 什么是vue数据劫持 Vue.js是一个MVVM框架,数据是驱动视图的核心,所以数据的变化非常重要。vue数据劫持是vue.js用来监听数据变化并作出响应的核心机制。 实现原理 Vue.js通过数据劫持的方式来监听数据变化并作出响应。数据劫持主要通过Object.defineProperty()这个…

    Vue 2023年5月28日
    00
  • Vue对象的深层劫持详细讲解

    Vue对象的深层劫持详细讲解 Vue.js是一个JavaScript框架,可以用于基于MVVM模式的Web应用程序开发。其中最重要的部分是Vue对象(Vue实例),它是Vue应用程序的根实例,并且通过对Vue对象进行劫持可以实现响应式数据绑定。在Vue.js中,有两种类型的数据劫持:深层劫持和浅层劫持。本文将详细讲解深层劫持及其使用方法。 什么是深层劫持? …

    Vue 2023年5月28日
    00
  • vue + element动态多表头与动态插槽

    “vue + element动态多表头与动态插槽”的攻略如下: 1. 动态多表头 动态多表头的实现需要借助element-ui的<el-table-column>组件的嵌套。具体实现步骤如下: 在vue的data中定义动态表头的数据,包括每个表头的名称、宽度等信息,可以使用一个数组来存储。 data() { return { tableHeade…

    Vue 2023年5月28日
    00
  • 利用vue对比两组数据差异的可视化组件详解

    你好,下面是对“利用vue对比两组数据差异的可视化组件详解”的完整攻略的详细讲解: 利用vue对比两组数据差异的可视化组件详解 什么是数据差异可视化组件? 数据差异可视化组件可以让用户直观地看到两组数据之间的区别,通常用于比较历史数据和最新数据或两个数据集之间的差异。利用数据差异可视化组件,用户可以快速了解两组数据之间的变化情况,从而更好地进行决策和分析。 …

    Vue 2023年5月29日
    00
  • Vue.js实战之组件之间的数据传递

    Vue.js是一个流行的JavaScript框架,其中组件是Vue.js中最重要的概念之一。在组件化开发中,组件是可重用的代码块,它们通常具有自己的状态和行为,并且可以相互交互。在本文中,我们将探讨Vue.js中组件之间的数据传递。 父组件向子组件传递数据 在Vue.js中,父组件可以通过props向子组件传递数据。props是子组件接收的属性,可以像下面这…

    Vue 2023年5月28日
    00
  • Vue组件中使用防抖和节流实例分析

    下面是关于”Vue组件中使用防抖和节流实例分析”的攻略: 什么是防抖和节流 在介绍如何在Vue组件中使用防抖和节流之前,我们先来了解一下什么是防抖和节流。 防抖 防抖,顾名思义,就是防止抖动。在前端开发中,防抖指的是在一段时间内连续触发某个事件时,只执行一次处理函数。也就是说,当事件触发后,只有在指定的间隔时间内没有再次触发事件,才会执行函数。 节流 节流是…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部