vue-cli webpack配置文件分析

yizhihongxing

下面我详细讲解“vue-cli webpack配置文件分析”的完整攻略。

什么是vue-cli webpack配置文件?

vue-cli是一个脚手架工具,能够快速创建 Vue.js 项目,它使用了 webpack 作为编译打包工具,并提供了默认的 webpack 配置文件,以满足一般项目的需求。vue-cliwebpack 的配置文件位于 build 目录下。

webpack配置文件分析

vue-cli 中,webpack 的配置文件主要分为两部分,一部分是 webpack.base.conf.js,另一部分是 webpack.prod.conf.jswebpack.dev.conf.js。其中,webpack.base.conf.js 是基础配置文件,而 webpack.prod.conf.jswebpack.dev.conf.js 则是用于生产环境和开发环境的具体配置文件。

webpack.base.conf.js

webpack.base.conf.jswebpack 的基础配置文件,其中定义了一些公用的配置项,比如入口文件、出口文件、loaderplugin 等。

入口文件和出口文件的配置

webpack.base.conf.js 中,我们可以配置入口文件和出口文件,如下:

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
  }
}

上述代码中,entry 字段指定了入口文件为 ./src/main.jsoutput 字段指定了出口文件的路径和名称,其中 filename: '[name].js' 指的是生成的文件名称以入口文件名称为准。

loader的配置

webpack 中,我们需要使用各种 loader 来处理不同类型的文件,比如 css-loader 用于处理 CSS 文件,babel-loader 用于处理 JavaScript 文件等。在 webpack.base.conf.js 中,我们可以配置各种 loader,如下:

module.exports = {
  module: {
    rules: [
      {
        test: /\.vue$/,
        loader: 'vue-loader',
        options: vueLoaderConfig
      },
      {
        test: /\.js$/,
        loader: 'babel-loader',
        include: [resolve('src'), resolve('test'), resolve('node_modules/webpack-dev-server/client')]
      },
      {
        test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
        loader: 'url-loader',
        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]')
        }
      }
    ]
  }
}

上述代码中,我们定义了几个常用的 loader,包括 vue-loader 用于处理 .vue 文件,babel-loader 用于将 ES6+ 代码转换为 ES5 代码等。

plugin的配置

webpack 中,plugin 可以扩展、增强各种能力,比如html-webpack-plugin 用于生成 HTML 文件、extract-text-webpack-plugin 用于将样式表抽取成独立的 CSS 文件等。在 webpack.base.conf.js 中,我们也可以配置各种 plugin,如下:

module.exports = {
  plugins: [
    new HtmlWebpackPlugin({
      filename: process.env.NODE_ENV === 'testing' ? 'index.html' : config.build.index,
      template: 'index.html',
      inject: true,
      favicon: 'favicon.ico',
      minify: {
        removeComments: true,
        collapseWhitespace: true,
        removeAttributeQuotes: true
      },
      chunksSortMode: 'dependency'
    })
  ]
}

上述代码中,我们使用了 html-webpack-plugin 来生成 HTML 文件,其中配置了模板文件路径和输出文件名等选项。

webpack.prod.conf.js 和 webpack.dev.conf.js

webpack.prod.conf.jswebpack.dev.conf.js 分别用于生产环境和开发环境的具体配置,这两个文件中都包含了 webpack.base.conf.js 的配置,同时也对其进行了增强和修改。在这两个文件中,我们可以设置诸如代码压缩、代码分离、代码热更新等多种选项。

代码压缩

vue-cli 中,我们可以使用 uglifyjs-webpack-plugin 插件来对代码进行压缩,如下:

module.exports = {
  plugins: [
    new UglifyJsPlugin({
      uglifyOptions: {
        compress: {
          warnings: false
        }
      },
      sourceMap: config.build.productionSourceMap,
      parallel: true
    })
  ]
}

上述代码中,我们使用了 uglifyjs-webpack-plugin 插件,同时调用了 uglifyOptions 方法来设置代码压缩中的一些选项。

代码分离

代码分离可以使得页面加载更快,也方便缓存等。在 vue-cli 中,我们可以使用 CommonsChunkPlugin 插件来实现代码分离,如下:

module.exports = {
  plugins: [
    new CommonsChunkPlugin({
      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
        )
      }
    }),
    new CommonsChunkPlugin({
      name: 'manifest',
      chunks: ['vendor']
    })
  ]
}

上述代码中,我们使用 CommonsChunkPlugin 插件来实现代码分离功能,vendor 是将所有 node_modules 中的模块都提取到一个单独的 vendor.js 文件中,manifest 用于提取 webpack 运行时代码,以便在应用程序中稳定可靠地使用它。

代码热更新

代码热更新可以使得代码修改后不必刷新页面即可生效,方便开发效率。在 vue-cli 中,我们可以使用 webpack-dev-server 来实现代码热更新,如下:

module.exports = {
  devServer: {
    clientLogLevel: 'warning',
    hot: true,
    contentBase: false, // since we use CopyWebpackPlugin.
    compress: true,
    host: 'localhost',
    port: 8080,
    open: false,
    overlay: { warnings: false, errors: true },
    publicPath: '/',
    proxy: {},
    quiet: true, // necessary for FriendlyErrorsPlugin
    watchOptions: {
      poll: false,
    }
  }
}

上述代码中,我们配置了 devServer 对象,其中包括了热更新等多种选项,如 hot: true 用于开启热更新,quiet: true 用于在控制台中只输出警告和错误等,方便调试。

示例说明

下面我们通过示例来说明 vue-cli webpack 的配置文件分析。

示例一:使用 sass 预处理器

我们在 vue-cli 中使用 sass 预处理器时,需要在 webpack.base.conf.js 中配置相应 loader,如下:

module.exports = {
  module: {
    rules: [
      {
        test: /\.scss$/,
        loader: ['style-loader', 'css-loader', 'sass-loader']
      }
    ]
  }
}

上述代码中,我们添加了 sass-loader 来处理 .scss 文件。

示例二:使用 vue.config.js 文件代替 webpack.config.js 文件

vue-cli@3.0 及以上版本中,我们可以使用 vue.config.js 文件来代替 webpack.config.js 文件来进行配置,如下:

module.exports = {
  configureWebpack: {
    plugins: [
      new HtmlWebpackPlugin({
        template: path.resolve(__dirname, 'public/index.html')
      })
    ]
  }
}

上述代码中,我们使用 configureWebpack 字段来进行配置,其中配合 HtmlWebpackPlugin 插件设置了模板文件路径等选项。

好了,以上就是 vue-cli webpack 的配置文件分析完整攻略,希望对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue-cli webpack配置文件分析 - Python技术站

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

相关文章

  • 浅谈vue使用axios的回调函数中this不指向vue实例,为undefined

    在Vue项目中,我们通常使用 axios 来进行 HTTP 请求。但是,在 axios 的回调函数中, this 的指向经常会出现问题,指向的不是 Vue 实例,而是 undefined。这种情况通常发生在箭头函数、回调函数嵌套等场景中。 为了解决这个问题,我们可以采取以下两种方法: 方法一:使用箭头函数 ES6 的箭头函数可以继承上下文中的 this,因此…

    Vue 2023年5月28日
    00
  • 关于VueSSR的一些理解和详细配置

    关于VueSSR的一些理解和详细配置 VueSSR简介 Vue Server-Side Rendering(Vue SSR)是为了解决客户端渲染(CSR)中的SEO(Search Engine Optimization)问题而出现的。Vue SSR使用Node.js的服务器渲染Vue组件,在服务器端将Vue组件渲染成HTML并将其发送给客户端。在客户端接收到…

    Vue 2023年5月28日
    00
  • Spring Boot集成Shiro实现动态加载权限的完整步骤

    下面我将为您详细讲解Spring Boot集成Shiro实现动态加载权限的完整步骤。 一、引入依赖 在Spring Boot项目中,需要引入以下依赖: <!– shiro依赖 –> <dependency> <groupId>org.apache.shiro</groupId> <artifactId…

    Vue 2023年5月28日
    00
  • 一篇文章带你了解vue路由

    一篇文章带你了解Vue路由 什么是Vue路由 Vue路由管理的是Vue应用程序中的页面导航,它是Vue框架中的一个重要组件。在单页应用程序中,页面的切换并不会引起浏览器刷新,这一过程是通过Vue路由来完成的。 Vue路由的实现原理是在应用程序中添加观察者模式,当用户进行页面导航时,Vue路由会根据用户的请求,实时更新页面内容,并将导航历史记录添加到浏览器的历…

    Vue 2023年5月27日
    00
  • 详解vue axios二次封装

    下面是“详解vue axios二次封装”的完整攻略。 一、为什么需要封装axios? 在Vue应用中发起网络请求,一般会选择使用axios库。因为axios具有一系列强大的功能,比如:支持Promise,支持取消请求,拦截请求和响应,自动转换JSON格式等。但是,如果我们直接使用axios,会有一些不方便的地方,比如:每个请求都需要设置baseUrl、每个请…

    Vue 2023年5月28日
    00
  • vue+moment实现倒计时效果

    实现倒计时效果是前端项目中常见的需求。本文将介绍如何使用vue和moment.js库实现倒计时效果,并提供两个示例进行说明。 步骤一:安装moment.js库 在使用moment.js库之前,我们需要先进行安装。具体步骤如下: npm install moment –save 这样就可以在vue项目中使用moment.js库了。 步骤二:在vue组件中引入…

    Vue 2023年5月29日
    00
  • mpvue实现左侧导航与右侧内容的联动

    下面是详细讲解如何使用mpvue实现左侧导航与右侧内容的联动。 一、安装mpvue 首先需要安装mpvue脚手架,具体可以参考mpvue官网提供的安装指引。 二、创建页面结构 接下来需要创建左侧导航和右侧内容的页面结构,参考如下代码: <template> <div class="container"> <d…

    Vue 2023年5月27日
    00
  • vue实现单一筛选、删除筛选条件

    要实现单一筛选、删除筛选条件,我们需要理解 Vue 组件之间的通信,具体的做法是使用一个共享状态管理筛选条件,当用户点击筛选或者删除筛选条件时,修改这个共享状态,并通知组件进行相应的更新。这个共享状态可以借助于 Vuex 状态管理器实现。 下面是实现这个功能的具体步骤: 第一步:创建 Vuex 状态管理器 声明一个对象作为 Vuex 的 state,这个 s…

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