const path = require('path') const qs = require('querystring') const { md5, removeExt, getPlatformExts } = require('@dcloudio/uni-cli-shared') const { cacheTemplate, cacheCompilerOptions, getPlatformTarget } = require('./shared') const templateExt = getPlatformExts().template module.exports = function (content) { if (process.env.UNI_USING_COMPONENTS) { return require('./template-new').call(this, content) } this.cacheable && this.cacheable() const realResourcePath = path.relative(process.env.UNI_INPUT_DIR, this.resourcePath) if (process.env.UNI_USING_COMPONENTS) { // 向 uni-template-compier 传递 emitFile const vueLoaderOptions = this.loaders.find(loader => loader.ident === 'vue-loader-options') if (vueLoaderOptions) { Object.assign(vueLoaderOptions.options.compilerOptions, { resourcePath: removeExt(realResourcePath) + templateExt, emitFile: this.emitFile }) } else { throw new Error('vue-loader-options parse error') } } else { if (!content.trim()) { content = '' } cacheTemplate(realResourcePath, content) const query = qs.parse(this.resourceQuery.slice(1)) const { id } = query const compilerOptions = { scopeId: query.scoped ? `data-v-${id}` : null, target: getPlatformTarget(), md5: md5(content.trim() + process.env.UNI_PLATFORM), realResourcePath } cacheCompilerOptions(realResourcePath, compilerOptions) // 向 vue-loader templateLoader 传递 compilerOptions const vueLoaderOptions = this.loaders.find(loader => loader.ident === 'vue-loader-options') if (vueLoaderOptions) { Object.assign(vueLoaderOptions.options.compilerOptions, compilerOptions) } else { throw new Error('vue-loader-options parse error') } } return content }