详解在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 相关文章推荐
Javascript实例教程(19) 使用HoTMetal(5)
Dec 23 Javascript
jquery $.getJSON()跨域请求
Dec 21 Javascript
js 操作select和option常用代码整理
Dec 13 Javascript
JavaScript Math.ceil() 函数使用介绍
Dec 11 Javascript
javascript中 try catch用法
Aug 16 Javascript
JS获取元素多层嵌套思路详解
May 16 Javascript
jQuery中的ready函数与window.onload谁先执行
Jun 21 Javascript
分享Bootstrap简单表格、表单、登录页面
Aug 04 Javascript
快速将Vue项目升级到webpack3的方法步骤
Sep 14 Javascript
微信小程序 页面滑动事件的实例详解
Oct 12 Javascript
浅析Angular 实现一个repeat指令的方法
Jul 21 Javascript
详解vue-cli项目开发/生产环境代理实现跨域请求
Jul 23 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
Laravel中encrypt和decrypt的实现方法
2017/09/24 PHP
javascript实现复制与粘贴操作实例
2014/10/16 Javascript
javascript 操作符(~、&amp;、|、^、)使用案例
2014/12/31 Javascript
JS实现适合于后台使用的动画折叠菜单效果
2015/09/21 Javascript
JavaScript中Object.prototype.toString方法的原理
2016/02/24 Javascript
BootStrap tab选项卡使用小结
2020/08/09 Javascript
jQuery实现点击某个div打开层,点击其他div关闭层实例分析(阻止冒泡)
2016/11/18 Javascript
jQuery插件zTree实现删除树节点的方法示例
2017/03/08 Javascript
二维码图片生成器QRCode.js简单介绍
2017/08/18 Javascript
Javascript中toFixed计算错误(依赖银行家舍入法的缺陷)解决方法
2017/08/22 Javascript
Vue.js devtool插件安装后无法使用的解决办法
2017/11/27 Javascript
把vue-router和express项目部署到服务器的方法
2018/02/21 Javascript
Bootstrap模态对话框中显示动态内容的方法
2018/08/10 Javascript
vue2.0 element-ui中el-select选择器无法显示选中的内容(解决方法)
2018/08/24 Javascript
Vue数据绑定简析小结
2019/05/07 Javascript
vue-cli或vue项目利用HBuilder打包成移动端app操作
2020/07/29 Javascript
js实现表格数据搜索
2020/08/09 Javascript
Python备份目录及目录下的全部内容的实现方法
2016/06/12 Python
Python 多线程搜索txt文件的内容,并写入搜到的内容(Lock)方法
2019/08/23 Python
python破解bilibili滑动验证码登录功能
2019/09/11 Python
python使用gdal对shp读取,新建和更新的实例
2020/03/10 Python
美国购买和销售礼品卡平台:Raise
2017/01/13 全球购物
Trip.com澳大利亚:在线旅行社
2019/12/01 全球购物
企划专员岗位职责
2013/12/09 职场文书
八年级英语教学反思
2014/01/09 职场文书
学习委员自我鉴定
2014/01/13 职场文书
求职信模板怎么做
2014/01/26 职场文书
团支书竞选演讲稿
2014/04/28 职场文书
减负增效提质方案
2014/05/23 职场文书
四风对照检查材料范文
2014/09/27 职场文书
大学生助学金感谢信
2015/01/21 职场文书
2016年教师反腐倡廉心得体会
2016/01/13 职场文书
HTML+CSS制作心跳特效的实现
2021/05/26 HTML / CSS
Jupyter Notebook 如何修改字体和大小以及更改字体样式
2021/06/03 Python
Python装饰器的练习题
2021/11/23 Python
使用CSS实现按钮边缘跑马灯动画
2023/05/07 HTML / CSS