-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathtranst.js
68 lines (61 loc) · 1.14 KB
/
transt.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
// const babylon = require('babylon')
const t = require('@babel/types')
const parser = require('@babel/parser')
const generate = require('@babel/generator').default
const traverse = require('@babel/traverse').default
const template = require('@babel/template').default
const code = `
export default {
data () {
return {
name: '大哥',
good: ''
}
},
created () {
this.gosay()
},
methods: {
async gosay (a) {
let res = await this.test()
this.good = res.code
},
test () {
console.log('a')
}
}
}
`
let temObj = {}
const ast = parser.parse(code, {
sourceType: 'module'
})
traverse(ast, {
Identifier (path) {
if (t.isIdentifier(path.node, {
name: 'methods'
})) {
temObj['methods'] = path.parentPath.node.value
}
},
enter (path) {
// console.log(path)
}
})
let source = generate(ast).code
console.log(source)
const buildRequire = template(`
export default {
data () {
return {
name: DATA
}
},
methods: METHODS
}
`)
const ast2 = buildRequire({
DATA: t.stringLiteral('qqq'),
METHODS: temObj['methods']
})
console.log(generate(ast2).code)