vue-cli webpack配置文件分析

下面我详细讲解“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日

相关文章

  • Project Reactor 响应式范式编程

    Project Reactor 响应式范式编程 简介 Project Reactor是一款响应式范式编程框架,用于构建基于流(stream)概念的异步、非阻塞、事件驱动的应用程序。它基于Reactive Streams标准,并提供了一系列工具类和API,能够轻松地创建、组合和执行异步流处理操作。在使用Project Reactor编程时,开发人员通过声明式方…

    Vue 2023年5月28日
    00
  • 使用Vue实现简单计算器

    当使用Vue实现简单计算器时,需要进行以下步骤: 安装Vue.js 使用Vue.js开发应用程序之前,需要先安装Vue.js。可以通过以下两种方式安装: 通过CDN引入Vue.js文件 可以在html文件中使用CDN引入Vue.js文件。使用CDN可以快速方便地开始使用Vue.js,并且可以避免下载和安装Vue.js的麻烦。 <script src=&…

    Vue 2023年5月29日
    00
  • 详解vue页面状态持久化详解

    详解Vue页面状态持久化攻略 在开发Vue应用时,我们往往需要实现一些持久化的功能,使得页面状态能够在不同的访问周期之间保持不变。本文将介绍如何使用localStorage和Vuex实现Vue页面状态的持久化。 使用localStorage实现持久化 localStorage是一种在浏览器上存储数据的机制,数据将在不同的浏览器访问周期中被保留。我们可以利用l…

    Vue 2023年5月29日
    00
  • 最新Vue过滤器介绍及使用方法

    最新Vue过滤器介绍及使用方法 什么是Vue过滤器 过滤器(Filters)是Vue.js用来处理文本格式化的一种方式。它们不支持绑定表达式,而是被添加在要输出的Mustache标签{{}}后面,由管道符 | 来连接。过滤器可以用在文本插值和 v-bind 表达式中。 Vue内置过滤器 Vue.js提供了一些内置的过滤器,它们大多数都用于格式化文本: {{ …

    Vue 2023年5月27日
    00
  • vuecli中chainWebpack的常用操作举例

    下面是详细讲解”vuecli中chainWebpack的常用操作举例”的攻略: 什么是chainWebpack 在使用VueCLI创建的项目中,除了可以使用默认的配置之外,还可以自定义Webpack的一些配置。在Webpack的配置文件中,有一个configureWebpack选项,可以直接添加和修改Webpack的配置。而chainWebpack操作提供了…

    Vue 2023年5月27日
    00
  • 详解Vue 匿名、具名和作用域插槽的使用方法

    当我们在Vue中使用插槽时,通常会使用匿名、具名或作用域插槽。在本文中,我们将详细讲解这些插槽的用法,并提供一些示例帮助读者更好地理解。 1. 匿名插槽 目的 匿名插槽的目的是在父组件中,向子组件传递HTML内容。父组件的HTML内容会被子组件所默认接受,并且可以通过插槽名称进行调用。 使用方法 在父组件中,使用<slot>标签来占位子组件的位置…

    Vue 2023年5月28日
    00
  • vue实现excel表格的导入导出的示例

    当我们需要在前端实现excel表格的导入导出操作时,可以使用vue库提供的一些插件,轻松达到这个目标。接下来,我将详细讲解vue实现excel表格导入导出的完整攻略。 1. 安装依赖 在进行excel表格导入导出操作时,我们需要安装以下几个依赖: npm install xlsx npm install file-saver npm install scri…

    Vue 2023年5月27日
    00
  • vue 解决数组赋值无法渲染在页面的问题

    当 Vue 绑定的数据是一个数组时,使用原生的赋值方式(例如 array[0] = newValue)并不会触发组件的重新渲染,因为 Vue 无法识别这种方式的数据变动。为了解决这种问题,需要使用 Vue 提供的特殊方法,或在代码层面做出一些调整。 下面是解决数组赋值无法渲染在页面的问题的完整攻略: 1. 使用特殊方法进行数组数据更新 Vue 提供了一些特殊…

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