详解在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的offset、client、scroll使用方法详解
Dec 25 Javascript
javascript图像处理—仿射变换深度理解
Jan 16 Javascript
JavaScript判断变量是对象还是数组的方法
Aug 28 Javascript
基于jquery实现人物头像跟随鼠标转动
Aug 23 Javascript
jQuery实现选项联动轮播效果【附实例】
Apr 19 Javascript
js实现登录注册框手机号和验证码校验(前端部分)
Sep 28 Javascript
js数组去重的N种方法(小结)
Jun 07 Javascript
js使用ajax传值给后台,后台返回字符串处理方法
Aug 08 Javascript
微信小程序中遇到的iOS兼容性问题小结
Nov 14 Javascript
解决vue组件props传值对象获取不到的问题
Jun 06 Javascript
ES6 Promise对象的含义和基本用法分析
Jun 14 Javascript
Javascript执行上下文顺序的深入讲解
Nov 04 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
如何冲泡挂耳包咖啡?技巧是什么
2021/03/04 冲泡冲煮
Phpbean路由转发的php代码
2008/01/10 PHP
php excel类 phpExcel使用方法介绍
2010/08/21 PHP
php5.4以下版本json不支持不转义内容中文的解决方法
2015/01/13 PHP
PHP中的traits简单使用实例
2015/05/13 PHP
给WordPress中的留言加上楼层号的PHP代码实例
2015/12/14 PHP
thinkphp诸多限制条件下如何getshell详解
2020/12/09 PHP
jQuery live( type, fn ) 委派事件实现
2009/10/11 Javascript
再谈javascript面向对象编程
2012/03/18 Javascript
javaScript array(数组)使用字符串作为数组下标的方法
2013/11/19 Javascript
jQuery晃动层特效实现方法
2015/03/09 Javascript
简介JavaScript中的push()方法的使用
2015/06/09 Javascript
JavaScript的类型、值和变量小结
2015/07/09 Javascript
JavaScript中创建对象的模式汇总
2016/04/19 Javascript
详解vue2.0脚手架的webpack 配置文件分析
2017/05/27 Javascript
限时抢购-倒计时的完整实例(分享)
2017/09/17 Javascript
Vue 项目分环境打包的方法示例
2018/08/03 Javascript
在NPM发布自己造的轮子的方法步骤
2019/03/09 Javascript
vue.js高德地图实现热点图代码实例
2019/04/18 Javascript
async/await让异步操作同步执行的方法详解
2019/11/01 Javascript
解决vue数据不实时更新的问题(数据更改了,但数据不实时更新)
2020/10/27 Javascript
[06:35]2014DOTA2国际邀请赛 老男孩梦圆西雅图中国军团世界最强
2014/07/22 DOTA
python网络编程之UDP通信实例(含服务器端、客户端、UDP广播例子)
2014/04/25 Python
python中列表元素连接方法join用法实例
2015/04/07 Python
详解Python中heapq模块的用法
2016/06/28 Python
Python批量更改文件名的实现方法
2017/10/29 Python
Python使用matplotlib绘图无法显示中文问题的解决方法
2018/03/14 Python
python基于plotly实现画饼状图代码实例
2019/12/16 Python
使用Python获取当前工作目录和执行命令的位置
2020/03/09 Python
python中slice参数过长的处理方法及实例
2020/12/15 Python
寻找完美的房车租赁:RVShare
2019/02/23 全球购物
毕业生找工作的自我评价
2013/10/18 职场文书
党员反对四风问题思想汇报
2014/09/12 职场文书
2015年医德医风工作总结
2015/04/02 职场文书
公司要求试用期员工提交“述职报告”,该怎么写?
2019/07/17 职场文书
2019年家电促销广告语集锦
2019/10/21 职场文书