详解在vue-cli3.0中自定css、js和图片的打包路径


Posted in Javascript onAugust 26, 2019

前言

我们有时候因为一些特殊需求,可能需要将js/css/img等资源文件都打包到根路径下,但vue-cli3.0的路径配置中仅有 assetsDir配置项能够配置所有的静态文件所在的文件夹,并不能针对css/js/img等资源文件分别来做设置,那么请看我如何尝试的吧!

分析

众所周知,vue-cli3.0使用了webpack进行打包处理,那么我们是否可以拿到目前打包默认的一些webpack配置,并在这些配置中找到一些蛛丝马迹,从而更改配置来实现对打包路径的更改呢?

好在vue-cli3.0提供了这样的功能!

我假设您已经安装了vue-cli3.0,那么打开命令行,运行一下命令:

vue ui

这个命令将会启动一个页面,用来简化开发过程中的一系列操作。

我们先导入当前项目(自己摸索下,此处不展开详说)。

我们进入<任务>页面,点击inspect选项卡,并点击运行按钮,将会得到该项目下所有的webpack配置项。

将这个配置复制到我们的编辑器中,然后我们查找路径'js/', 'css/', 'img/',将会看到这些路径所配置的一些地方,我的项目中这些配置在以下部分:

output配置为:

output: {
  path: 'xxx',
  filename: 'js/[name].[contenthash:8].js',
  publicPath: '',
  chunkFilename: 'js/[name].[contenthash:8].js'
}

plugin配置为:

/* config.plugin('extract-css') */
new MiniCssExtractPlugin(
  {
  filename: 'css/[name].[contenthash:8].css',
  chunkFilename: 'css/[name].[contenthash:8].css'
  }
),

loader配置为:

/* config.module.rule('images') */
{
  test: /\.(png|jpe?g|gif|webp)(\?.*)?$/,
  use: [
    /* config.module.rule('images').use('url-loader') */
    {
    loader: 'url-loader',
    options: {
      limit: 4096,
      fallback: {
      loader: 'file-loader',
      options: {
        name: 'img/[name].[hash:8].[ext]'
      }
      }
    }
    }
  ]
},
/* config.module.rule('svg') */
{
  test: /\.(svg)(\?.*)?$/,
  use: [
    /* config.module.rule('svg').use('file-loader') */
    {
    loader: 'file-loader',
    options: {
      name: 'img/[name].[hash:8].[ext]'
    }
    }
  ]
},

// 其他类型资源的loader等等

那么问题就简单了,我们更改掉这些webpack配置就可以了。

更改webpack配置

需要更改的webpack相关配置如下:

js路径配置更改

js路径更改output配置即可,output配置在configureWebpack配置项中进行更改,因为vue.config.js中对于configureWebpack选项的配置将会被merge到webpack配置中,所以更改该项配置即可,如下:

module.exports = {
  configureWebpack: config => {
    // js output config
    config.output.filename = '[name].[contenthash:8].js'
    config.output.chunkFilename = '[name].[contenthash:8].js'

  },
}

更改MiniCssExtractPlugin插件配置

更改该配置需要先安装MiniCssExtractPlugin插件到开发依赖中,如下:

npm install --save-dev mini-css-extract-plugin
# 或者
yarn add mini-css-extract-plugin --dev

然后在vue.config.js文件中添加相关配置到chainWebpack即可,如下所示:

module.exports = {
  chainWebpack: config => {
    // css output config
    let miniCssExtractPlugin = new MiniCssExtractPlugin(
      {
        filename: '[name].[contenthash:8].css',
        chunkFilename: '[name].[contenthash:8].css'
      }
    )
    config.plugin('extract-css').use(miniCssExtractPlugin)
  },
}

更改各种资源loader配置

更改该配置仍然需要将相关配置添加到chainWepack配置项中,如下:

module.exports = {
  chainWebpack: config => {
    // image output config
    config.module.rule('images')
      .test(/\.(png|jpe?g|gif|webp)(\?.*)?$/)
      .use('url-loader')
      .loader('file-loader')
      .options({
        name: '[name].[hash:8].[ext]'
      })
    config.module.rule('svg')
      .test(/\.(svg)(\?.*)?$/)
      .use('file-loader')
      .loader('file-loader')
      .options({
        name: '[name].[hash:8].[ext]'
      })
  },
}

结语

总的配置项如下所示:

module.exports = {
  configureWebpack: config => {
    // js output config
    config.output.filename = '[name].[contenthash:8].js'
    config.output.chunkFilename = '[name].[contenthash:8].js'

  },
  chainWebpack: config => {
    // css output config
    let miniCssExtractPlugin = new MiniCssExtractPlugin(
      {
        filename: '[name].[contenthash:8].css',
        chunkFilename: '[name].[contenthash:8].css'
      }
    )
    config.plugin('extract-css').use(miniCssExtractPlugin)

    // image output config
    config.module.rule('images')
      .test(/\.(png|jpe?g|gif|webp)(\?.*)?$/)
      .use('url-loader')
      .loader('file-loader')
      .options({
        name: '[name].[hash:8].[ext]'
      })
    config.module.rule('svg')
      .test(/\.(svg)(\?.*)?$/)
      .use('file-loader')
      .loader('file-loader')
      .options({
        name: '[name].[hash:8].[ext]'
      })

  },
}

这时,在运行inspect检查webpack配置,即可看到相关路径前的css/,js/,img/等前缀已经消失,快快打包尝试吧!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery实现表格颜色交替显示的方法
Mar 09 Javascript
Javascript中setTimeOut和setInterval的定时器用法
Jun 12 Javascript
基于jquery实现人物头像跟随鼠标转动
Aug 23 Javascript
封装属于自己的JS组件
Jan 27 Javascript
JS使用正则实现去掉字符串左右空格的方法
Dec 27 Javascript
前端页面文件拖拽上传模块js代码示例
May 19 Javascript
JS通过调用微信API实现微信支付功能的方法示例
Jun 29 Javascript
基于Vue生产环境部署详解
Sep 15 Javascript
ReactNative 之FlatList使用及踩坑封装总结
Nov 29 Javascript
jQuery AJAX 方法success()后台传来的4种数据详解
Aug 08 jQuery
layui table 多行删除(id获取)的方法
Sep 12 Javascript
Vue.js自定义指令学习使用详解
Oct 19 Javascript
微信小程序实现手势滑动效果
Aug 26 #Javascript
详解nuxt 微信公众号支付遇到的问题与解决
Aug 26 #Javascript
Vue路由之JWT身份认证的实现方法
Aug 26 #Javascript
Vue中跨域及打包部署到nginx跨域设置方法
Aug 26 #Javascript
js实现跟随鼠标移动的小球
Aug 26 #Javascript
vue 源码解析之虚拟Dom-render
Aug 26 #Javascript
Node.js爬虫如何获取天气和每日问候详解
Aug 26 #Javascript
You might like
PHP批量采集下载美女图片的实现代码
2013/06/03 PHP
php中filter_input函数用法分析
2014/11/15 PHP
PHP中4种常用的抓取网络数据方法
2015/06/04 PHP
php设计模式之正面模式实例分析【星际争霸游戏案例】
2020/03/24 PHP
Jquery AJAX 用于计算点击率(统计)
2010/06/30 Javascript
Javascript this 的一些学习总结
2012/08/31 Javascript
jquery必须知道的一些常用特效方法及使用示例(整理)
2013/06/24 Javascript
Javascript实现真实字符串剩余字数提示的实例代码
2013/10/22 Javascript
js鼠标及对象坐标控制属性详细解析
2013/12/14 Javascript
js给页面加style无效果的解决方法
2014/01/20 Javascript
display和visibility的区别示例介绍
2014/02/26 Javascript
javascript实现验证身份证号的有效性并提示
2015/04/30 Javascript
jQuery xml字符串的解析、读取及查找方法
2016/03/01 Javascript
NodeJS中的MongoDB快速入门详细教程
2016/11/11 NodeJs
获取当前月(季度/年)的最后一天(set相关操作及应用)
2016/12/27 Javascript
快速处理vue渲染前的显示问题
2018/03/05 Javascript
Vue 中使用vue2-highcharts实现top功能的示例
2018/03/05 Javascript
Vue实现搜索 和新闻列表功能简单范例
2018/03/16 Javascript
JavaScript轮播停留效果的实现思路
2018/05/24 Javascript
Vue3 的响应式和以前有什么区别,Proxy 无敌?
2020/05/20 Javascript
浅谈vue websocket nodeJS 进行实时通信踩到的坑
2020/09/22 NodeJs
浅谈Python数据类型之间的转换
2016/06/08 Python
python elasticsearch从创建索引到写入数据的全过程
2019/08/04 Python
python 爬虫 实现增量去重和定时爬取实例
2020/02/28 Python
python爬虫筛选工作实例讲解
2020/11/23 Python
商务英语毕业生自荐信范文
2013/11/08 职场文书
元旦晚会邀请函
2014/01/27 职场文书
社区健康教育实施方案
2014/03/18 职场文书
活动总结新闻稿
2014/08/30 职场文书
慈善募捐倡议书
2015/04/27 职场文书
公司辞职信模板
2015/05/13 职场文书
学雷锋感言
2015/08/03 职场文书
商务宴会祝酒词
2015/08/11 职场文书
手把手教你制定暑期学习计划,让你度过充实的暑假
2019/08/22 职场文书
Python基础详解之描述符
2021/04/28 Python
Python django中如何使用restful框架
2021/06/23 Python