最近在写 Vue-cli 脚手架插件的时候遇到一个场景,如果用户初始化项目的时候引入了 Vue-Router 和 Vuex,我需要把文件中的 import Vue from 'vue' 替换成 const Vue = window.Vue(这么做是我们这边项目的特殊场景所致),那么在 eslint 规范中,import 语句是放在文件顶部,所以简单的字符串替换是不可以的,你需要把这行代码插入到最后一个 import 语句的后面。因此我用了 recast 这个库先把代码生成 AST 树,再去修改 AST 树,最后再生成 code。
这里有个问题,在处理 router.js 文件的时候,遇到了 import('xxx') 这种 webpack 支持的动态 import 语法,这个在转换成 AST 树的时候会报错,那么怎么办呢?我已经用一种奇技淫巧解决了,问题留给你们做个小小的思考😀