const path = require('path')
|
|
const loaderUtils = require('loader-utils')
|
|
const t = require('@babel/types')
|
const parser = require('@babel/parser')
|
const traverse = require('@babel/traverse').default
|
|
const {
|
normalizeNodeModules
|
} = require('@dcloudio/uni-cli-shared/lib/platform')
|
|
module.exports = function (source, map) {
|
const params = loaderUtils.parseQuery(this.resourceQuery)
|
if (
|
process.env.UNI_PLATFORM === 'h5' ||
|
(
|
process.env.UNI_PLATFORM === 'app-plus' &&
|
process.env.UNI_USING_V3
|
)
|
) { // h5 or v3 app-plus
|
this.callback(
|
null,
|
`export default function (Component) {
|
(Component.options.wxs||(Component.options.wxs={}))['${params.module}'] = (function(module){
|
${source.trim()}
|
return module.exports
|
})({exports:{}});
|
}`,
|
map
|
)
|
} else { // mp
|
const callMethods = new Set()
|
if (source.indexOf('callMethod') !== -1) {
|
traverse(parser.parse(source, {
|
sourceType: 'module'
|
}), {
|
MemberExpression (path, state) {
|
const property = path.node.property
|
const parentNode = path.parent
|
if (
|
(
|
property.name === 'callMethod' ||
|
property.value === 'callMethod'
|
) &&
|
t.isCallExpression(parentNode) &&
|
t.isLiteral(parentNode.arguments[0])
|
) {
|
callMethods.add(parentNode.arguments[0].value)
|
}
|
}
|
})
|
}
|
if (params.issuerPath) {
|
const resourcePath = normalizeNodeModules(path.relative(process.env.UNI_INPUT_DIR, this.resourcePath))
|
this.emitFile(resourcePath, source)
|
}
|
this.callback(null,
|
`export default function (Component) {
|
if(!Component.options.wxsCallMethods){
|
Component.options.wxsCallMethods = []
|
}
|
${[...callMethods].map(method => {
|
return "Component.options.wxsCallMethods.push('" + method + "')"
|
}).join('\n')}
|
}`,
|
map)
|
}
|
}
|