详解基于vue-cli优化的webpack配置

  1. 什么是vue-cli优化的webpack配置?

vue-cli是Vue.js的脚手架工具,它能够简化Vue.js应用程序的搭建。默认情况下,vue-cli使用webpack作为打包工具。通常情况下,由于项目的特性、需求等意外的原因,你会需要自己对webpack进行一些优化配置,以满足项目的性能优化。

  1. 如何进行基于vue-cli优化的webpack配置?

在进行webpack配置优化之前,你需要确保已经安装好了vue-cli脚手架工具以及对应的版本。你可以使用vue-cli --version命令来查看是否安装了vue-cli,以及其对应的版本号。

然后,你需要创建一个基于vue-cli的工程,并且执行vue init webpack命令初始化webpack配置。接着按照下面的步骤进行优化。

(1)添加必要的webpack loader和plugin

添加babel-loader,解析ES6语法,并且可以根据需要添加更多loader,比如sass、less、postcss-loader等等。

添加vue-loader,编译.vue文件,使得组件可以使用.vue的语法,实现了模板、逻辑和样式的单文件组件开发;

添加UglifyJSPlugin,用于压缩代码文件的大小;

添加ExtractTextPlugin,用于将CSS文件从JS文件中抽离出来。

(2)启用代码分离

优化webpack的构建性能,启用代码分离,将业务代码与公共代码分离出来,减小各个打包后的文件大小,避免重复打包。

(3)启用cdn加速

加速资源的下载速度,可以减小加载文件的时间,提高网页的响应速度。与此同时,建议使用webpack-bundle-analyzer,帮你分析打包后的文件大小,帮你确定资源文件是否需要进行分离处理。

  1. 示例说明

(1)添加loader和plugin示例:

在webpack.base.conf.js文件中添加如下代码:

{
 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: {
   loaders: {
     sass: 'vue-style-loader!css-loader!postcss-loader!sass-loader', // <style lang="sass">
     scss: 'vue-style-loader!css-loader!postcss-loader!sass-loader', // <style lang="scss">
     css: 'vue-style-loader!css-loader!postcss-loader' // <style>
   }
 }
},
{
 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: /\.(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]')
 }
},

(2)启用代码分离示例:

在配置中添加如下代码:

new webpack.optimize.CommonsChunkPlugin({
   name: 'vendor',
   minChunks: function (module, count) {
     // 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 webpack.optimize.CommonsChunkPlugin({
   name: 'manifest',
   chunks: ['vendor']
 }),

(3)启用cdn加速示例:

在配置中添加如下代码:

new HtmlWebpackPlugin({
   filename: 'index.html',
   template: 'index.html',
   inject: true,
   cdn: {
     css: [
       'https://cdn.bootcss.com/element-ui/2.4.0/theme-chalk/index.css'
     ],
     js: [
       'https://cdn.bootcss.com/vue/2.5.2/vue.min.js',
       'https://cdn.bootcss.com/vue-router/3.0.1/vue-router.min.js',
       'https://cdn.bootcss.com/element-ui/2.4.0/index.js',
       '/static/js/vendor.dll.js',
     ]
   }
 }),

以上是对“详解基于vue-cli优化的webpack配置”的一些攻略说明,希望对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解基于vue-cli优化的webpack配置 - Python技术站

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

相关文章

  • jQWidgets jqxTreeGrid rowDoubleClick事件

    以下是关于 jQWidgets jqxTreeGrid 组件中 rowDoubleClick 事件的详细攻略。 jQWidgets jqxTreeGrid rowDoubleClick 事件 jQWidgets jqxTreeGrid 组件的 rowDoubleClick 事件在 TreeGrid 控件的行被双击时触发。通过设置 rowDoubleClick…

    jquery 2023年5月12日
    00
  • jQuery UI控制组类选项

    jQuery UI的控制组小部件提供了许多选项,可以自定义控制组的外观和行为。其中,classes选项用于指定控制组的CSS类。本文将详细介绍classes选项的语法和用法,并提供两个示例说明。 语法 以下是classes选项的基本语法: $(selector).controlgroup({ classes: { "ui-controlgroup&…

    jquery 2023年5月9日
    00
  • jQuery.each使用详解

    jQuery.each使用详解 简介 jQuery.each()函数是一种JavaScript的迭代器,用于遍历JavaScript对象和数组。该函数对于多个DOM元素和对象的集合特别有用,它提供了一种便捷的方法来遍历这些对象。 语法 $.each(collection, callback(indexInArray, valueOfElement)); 参数…

    jquery 2023年5月28日
    00
  • jQWidgets jqxTouch swipeMin属性

    以下是关于 jQWidgets jqxTouch swipeMin 属性的完整攻略: jQWidgets jqxTouch swipeMin 属性 swipeMin 属性用于设置刷屏事件的最小滑动距离,即用户在屏幕上滑动指的距离超过该值时,才会被视为刷屏事件。默认值为 30 像素。 语法 $(‘#targetElement’).jqxTouch({ swip…

    jquery 2023年5月11日
    00
  • jQWidgets jqxTextArea selectAll()方法

    以下是关于 jQWidgets jqxTextArea 组件中 selectAll() 方法的详细攻略。 jQWidgets jqxTextArea selectAll() 方法 jQWidgets jqxTextArea 组件的 selectAll() 方法用于选择文本框中的所有文本可以使用该方法来方便地选择文本框中的所有文本,以便进行复制、剪切或其他操作…

    jquery 2023年5月11日
    00
  • jQuery Mobile页面保持原生选项

    当在jQuery Mobile中创建一个表单时,默认情况下会将所有组件样式应用到每个表单元素中,这使得表单在不同平台和移动设备上看起来与原生UI不一致。为了解决这个问题,我们可以使用”data-enhance”属性来控制元素的外观样式并保持原生选项。以下是详细的攻略: 第一步:禁用全局选项 全局选项是指开启了$.mobile.autoInitializePa…

    jquery 2023年5月12日
    00
  • jQWidgets jqxDropDownList宽度属性

    jQWidgets jqxDropDownList宽度属性详解 jQWidgets是一个基于jQuery的UI组件库,提供了丰富UI组件和工具包。jqxDropDownList是Widgets组件中于实现下拉列表的组件。本文将详细介绍jqxDropDownList的width属性,包括其作用、语法示例。 jqxDropDownList width属性的基本语…

    jquery 2023年5月10日
    00
  • jQWidgets jqxGrid rowexpand事件

    jQWidgets jqxGrid rowexpand事件详解 jQWidgets是一个基于jQuery的UI组件库,提供了丰富UI组件工具包。jqxGrid是其中之一,本文将详细介绍jqxGrid的rowexpand事件,包括定义、语法和示例。 rowexpand事件的定义 jqxGrid的rowexpand事件在行详情面板展开时触发。通过使用rowexp…

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