详解在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 相关文章推荐
Jjcarousellite 实现图片列表滚动的简单实例
Nov 29 Javascript
jquery插件Jplayer使用方法简析
Apr 22 Javascript
JS实现仿PS的调色板效果完整实例
Dec 21 Javascript
详解Javascript中DOM的范围
Feb 13 Javascript
node.js 中间件express-session使用详解
May 20 Javascript
node.js操作mysql简单实例
May 25 Javascript
详谈for循环里面的break和continue语句
Jul 20 Javascript
简单实现js鼠标跟随效果
Aug 02 Javascript
你有必要知道的10个JavaScript难点
Jul 25 Javascript
分享Bootstrap简单表格、表单、登录页面
Aug 04 Javascript
原生JS实现移动端web轮播图详解(结合Tween算法造轮子)
Sep 10 Javascript
vue swipeCell滑动单元格(仿微信)的实现示例
Sep 14 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里的JS打印函数
2006/10/09 PHP
PHP中模拟处理HTTP PUT请求的例子
2014/07/22 PHP
Yii2实现自定义独立验证器的方法
2017/05/05 PHP
PHP7新特性之抽象语法树(AST)带来的变化详解
2018/07/17 PHP
在textarea中屏蔽js的某个function的javascript代码
2007/04/20 Javascript
javascript时区函数介绍
2012/09/14 Javascript
JQuery中的事件及动画用法实例
2015/01/26 Javascript
JQuery显示隐藏DIV的方法及代码实例
2015/04/16 Javascript
jQueryUI DatePicker 添加时分秒
2016/06/04 Javascript
weUI应用之JS常用信息提示弹层的封装
2016/11/21 Javascript
JavaScript实现经典排序算法之冒泡排序
2016/12/28 Javascript
JS三目运算(三元运算)方法详解
2017/03/01 Javascript
详解从Vue.js源码看异步更新DOM策略及nextTick
2017/10/11 Javascript
Node层模拟实现multipart表单的文件上传示例
2018/01/02 Javascript
详解vue-cli脚手架中webpack配置方法
2018/08/22 Javascript
详解swiper在vue中的应用(以3.0为例)
2018/09/20 Javascript
微信小程序云开发修改云数据库中的数据方法
2019/05/18 Javascript
解决echarts数据二次渲染不成功的问题
2020/07/20 Javascript
OpenLayer学习之自定义测量控件
2020/09/28 Javascript
js实现验证码干扰(静态)
2021/02/22 Javascript
[52:22]EG vs VG Supermajor小组赛B组 BO3 第一场 6.2
2018/06/03 DOTA
Python在Windows和在Linux下调用动态链接库的教程
2015/08/18 Python
pyenv命令管理多个Python版本
2017/03/26 Python
Python中实现switch功能实例解析
2018/01/11 Python
代码分析Python地图坐标转换
2018/02/08 Python
对python中数组的del,remove,pop区别详解
2018/11/07 Python
python将数组n等分的实例
2019/12/02 Python
python标准库OS模块函数列表与实例全解
2020/03/10 Python
Python类super()及私有属性原理解析
2020/06/15 Python
COACH德国官方网站:纽约现代奢侈品牌,1941年
2018/06/09 全球购物
竞选团支书演讲稿
2014/04/28 职场文书
相亲活动方案
2014/08/26 职场文书
关于读书的演讲稿600字
2014/08/27 职场文书
2015年妇幼卫生工作总结
2015/05/23 职场文书
人事部:年度述职报告范文
2019/07/12 职场文书
用Python远程登陆服务器的步骤
2021/04/16 Python