添加loader

vue.config.js中的chainWebpack中添加配置:

chainWebpack: config => {// my-loader为loader的别名,./src/myLoader.js是loader的位置config.resolveLoader.alias.set('my-loader', path.resolve(__dirname, './src/myLoader.js'))// 修改vue文件Loader的选项,增加新的处理loaderconst vueRule = config.module.rule('vue')vueRule.use('my-loader').loader('my-loader').end()
},

现在有个需求需要拦截所有vue页面中村的外链,在跳转到其他网站前先跳转到一个需要用户确认跳转的中间页,就像知乎做的那样

myLoader.js内容如下:

module.exports = function (source) {const replace = source.replace(/(?<=['"])(http.*.*)(?=['"])/g, '#/link?goto=$1')return replace
}

link就是和上述知乎类似的跳转前的中间页

添加plugin

一样也是在vue.config.js中的chainWebpack中添加配置:

chainWebpack: config => {// ./src/versionPlugin.js是plugin的位置const VersionPlugin = require('./src/versionPlugin')config.plugin('version').use(VersionPlugin).tap(args => {// 此处添加的参数可在versionPlugin的构造函数中获取return args})
}

现在有个需求需要在每次发布前根据当前时间设置项目的版本号的功能,versionPlugin内容如下:

'use strict'
const fs = require('fs')
const path = require('path')
const sep = path.sep
function VersionPlugin (options) {this.options = options || {}
}
VersionPlugin.prototype.apply = function (compiler) {var self = this// compiler的afterPlugins钩子compiler.plugin('afterPlugins', function (params) {const packageJsonPath = path.join(params.context, sep + 'package.json')const dateStr = getDateStr()let packageJsonStr = fs.readFileSync(packageJsonPath, 'utf8')const r = new RegExp('(?<=version\\":\\s*\\")(.*)(?=")')packageJsonStr = packageJsonStr.replace(r, "1.0." + dateStr)fs.writeFileSync(packageJsonPath, packageJsonStr, 'utf8')})
}
function getDateStr () {const now = new Date()return now.getFullYear() + format(now.getMonth() + 1) + format(now.getDate()) + format(now.getHours()) + format(now.getMinutes())function format (num) {return num < 10 ? '0' + num : '' + num}
}
module.exports = VersionPlugin

修改后的package.json内容:

{"name": "heart-patient","version": "1.0.202011011243","private": true,// ...
}

添加plugin的第二种方式

vue.config.jschainWebpack配置和上面一样,在VersionPlugin原型链上的apply函数修改如下:

VersionPlugin.prototype.apply = function (compiler) {compiler.hooks.afterPlugins.tap('version plugin', compiler => {const packageJsonPath = path.join(params.context, sep + 'package.json')const dateStr = getDateStr()let packageJsonStr = fs.readFileSync(packageJsonPath, 'utf8')const r = new RegExp('(?<=version\\":\\s*\\")(.*)(?=")')packageJsonStr = packageJsonStr.replace(r, "1.0." + dateStr)fs.writeFileSync(packageJsonPath, packageJsonStr, 'utf8')})
}

Vue Cli3 添加Loader和plugin相关推荐

  1. vue cli3 添加 px2rem-loader

    1.先安装  flexible和 postcss-px2rem npm install lib-flexible --savenpm install postcss-px2rem --save 2.引 ...

  2. Vue CLI3 移动端适配 【px2rem 或 postcss-plugin-px2rem】

    今天,我们使用Vue CLI3 做一个移动端适配 . 前言 首先确定你的项目是Vue CLI3版本以上的. 一.移动端适配包 1.安装移动端适配包 npm i lib-flexible -S 2.在m ...

  3. Vue cli3 库模式搭建组件库并发布到 npm

    三.规划目录结构 1.创建项目 在指定目录中使用命令创建一个默认的项目,或者根据自己需要自己选择. $ vue create . 2.调整目录 我们需要一个目录存放组件,一个目录存放示例,按照以下方式 ...

  4. Vue CLI3 基本使用配置;

    Vue CLI3 开始 安装: npm install -g @vue/cli # OR yarn global add @vue/cli 创建一个项目:  vue create my-project ...

  5. Vue Cli3 项目 vue.config.js 配置

    Vue Cli3 项目 vue.config.js 配置 配置优化 一.js文件最小化处理 二.分割代码 三.图片资源压缩 四.开启gzip压缩 先看一下优化配置之前的文件大小 通过vue-cli3脚 ...

  6. webpack的loader与plugin原理

    文章目录 loader原理 loader执行顺序 loader使用方式 loader的实现 参数 同步loader 异步loader Raw loader Pitching loader loader ...

  7. Webpack自定义Loader和Plugin方法

    手写Loader Loader 本质上是导出函数的 JavaScript 模块,而该模块导出的函数被称为 Normal Loader,在开发 Loader时,我们可以在导出的函数上添加一个 pitch ...

  8. 公司项目vue cli2升级到vue cli3

    背景: 公司项目历时时间较长,通过长时间的迭代,目前项目文件较多(src目录下有2217个文件),系统庞大, 之前通过vue cli2脚手架构建的项目框架,在本地开发时已经明显感觉到吃力(项目首次启动 ...

  9. Vue Cli3安装配置步骤

    一.准备工作: mac系统的前面加上sudo获取管理员权限 安装node.js(自带了软件包管理工具npm) 安装webpack,命令: sudo npm install webpack -g //- ...

最新文章

  1. 学习web前端开发要注意什么
  2. python 自学需要多久-怎么自学python,大概要多久?
  3. linux中配置jmeter环境变量,linux java 和jmeter 环境变量配置文件笔记(原)
  4. HTML-通知公告Tips
  5. jdbc连接各种数据库方式列表
  6. 【pytorch】torch.meshgrid()==>常用于生成二维网格,比如图像的坐标点
  7. 2015/12/12 考了PAT,又回来玩Python了。
  8. 七句话道出做人的底线【精辟】
  9. HMI报表设计与打印,标签、账单、支票、条码数据打印与出版VC++源码解决方案2018!
  10. 用电脑计算器计算以2为底的对数
  11. 微信开放平台:网站应用-微信登录
  12. JS打开新标签页(window.open应用)
  13. 常用密码学论文查找网站
  14. 《食物语》运营复盘 二次元女性向手游的发行之道
  15. Github如何绑定域名
  16. JeeSite(2):导入数据,进入系统
  17. vue 屏幕自适应及全屏放大缩小
  18. 行程码是怎么知道你去过哪些地方的呢?
  19. 2020年我的第一篇博客日报
  20. Nginx 启动报错 directive is not allowed here in

热门文章

  1. 第十章 结构体_C语言共用体(C语言union用法)详解
  2. 【强化学习笔记】强化学习中的常见符号
  3. Windows Key
  4. 大学计算机专业老师受人高吗,为什么大学里的计算机老师那么厉害,却不去当程序员拿高薪?...
  5. 读书笔记-精准努力-区别目标和想法
  6. JSOI 2018 Round 2 游记
  7. umount磁盘提示target is busy.
  8. ObjectARX JIG简单示意,实现正交例子
  9. RabbitMQ自学笔记
  10. [开源项目]Android_炫酷的3D音乐播放器_各种特效OpenGL