const {
|
getPlatformFilterTag,
|
normalizeNodeModules,
|
jsPreprocessOptions
|
} = require('@dcloudio/uni-cli-shared/lib/platform')
|
|
const preprocessor = require('@dcloudio/vue-cli-plugin-uni/packages/webpack-preprocess-loader/preprocess')
|
|
const FILTER_TAG = getPlatformFilterTag()
|
|
function preprocessBlock(block) {
|
if (block.content) {
|
block.content = preprocessor.preprocess(block.content, jsPreprocessOptions.context, {
|
type: jsPreprocessOptions.type
|
}).trim()
|
}
|
return block
|
}
|
|
module.exports = function parseCustomBlocks(descriptor, options) {
|
if (
|
process.env.UNI_PLATFORM &&
|
process.env.UNI_PLATFORM.indexOf('mp-') === 0 &&
|
!descriptor.script
|
) { // 临时方案:小程序平台,无script节点时,自动补充(激活componentSet,否则没法正常追加入口js,后续优化)
|
descriptor.script = {
|
type: 'script',
|
content: 'export default {}',
|
start: 100,
|
attrs: {},
|
end: 125
|
}
|
}
|
|
if (!descriptor.template || !FILTER_TAG || options.isAppNVue) {
|
// delete customBlocks
|
descriptor.customBlocks.length = 0
|
return descriptor
|
}
|
|
const modules = Object.create(null)
|
|
descriptor.customBlocks = descriptor.customBlocks.filter(block => {
|
if (
|
block.attrs.module &&
|
(
|
block.type === FILTER_TAG ||
|
block.attrs.lang === FILTER_TAG
|
)
|
) {
|
modules[block.attrs.module] = preprocessBlock(block)
|
return true
|
}
|
if ( // renderjs
|
block.attrs.module &&
|
(
|
block.type === 'renderjs' ||
|
block.attrs.lang === 'renderjs'
|
)
|
) {
|
block.type = 'renderjs'
|
block.attrs.lang = 'js'
|
descriptor.renderjs = preprocessBlock(block)
|
modules[block.attrs.module] = Object.assign({}, block, {
|
content: ''
|
})
|
}
|
})
|
|
if (Object.keys(modules).length) {
|
const filterModules = JSON.parse(JSON.stringify(modules))
|
Object.keys(filterModules).forEach(name => {
|
const filterModule = filterModules[name]
|
if (filterModule.attrs.src) {
|
filterModule.attrs.src = normalizeNodeModules(filterModule.attrs.src)
|
}
|
})
|
descriptor.template.attrs['filter-modules'] = Buffer.from(JSON.stringify(filterModules)).toString('base64')
|
}
|
|
return descriptor
|
}
|