const fs = require('fs') const path = require('path') const { pathToGlob } = require('@dcloudio/uni-cli-shared/lib/util') let partialIdentifier = false module.exports = { getPartialIdentifier () { if (!partialIdentifier) { partialIdentifier = { UNI_COMPILER_VERSION: require('../package.json').version } Object.keys(process.env).forEach(name => { if (name.indexOf('UNI_') === 0) { partialIdentifier[name] = process.env[name] } }) } return partialIdentifier }, getAutomatorCode () { const automator = `@dcloudio/uni-${process.env.UNI_SUB_PLATFORM || process.env.UNI_PLATFORM}/dist/automator` return process.env.UNI_AUTOMATOR_WS_ENDPOINT ? `import '${automator}';` : '' }, getWatchOptions () { return { ignored: [ pathToGlob(path.resolve(process.env.UNI_INPUT_DIR), '*.md'), path.resolve(process.env.UNI_INPUT_DIR, '.hbuilderx'), path.resolve(process.env.UNI_INPUT_DIR, '.editorconfig'), path.resolve(process.env.UNI_INPUT_DIR, '.gitignore'), path.resolve(process.env.UNI_INPUT_DIR, 'LICENSE'), path.resolve(process.env.UNI_INPUT_DIR, 'unpackage'), path.resolve(process.env.UNI_INPUT_DIR, 'uniCloud-aliyun'), path.resolve(process.env.UNI_INPUT_DIR, 'uniCloud-tcb'), path.resolve(process.env.UNI_INPUT_DIR, 'uniCloud-alipay'), path.resolve(process.env.UNI_INPUT_DIR, 'uniCloud-dcloud'), path.resolve(process.env.UNI_INPUT_DIR, 'cloudfunctions-aliyun'), path.resolve(process.env.UNI_INPUT_DIR, 'cloudfunctions-tcb') ] } }, getTsLoadOptions () { const { isInHBuilderX // 在 HBuilderX 的插件中 } = require('@dcloudio/uni-cli-shared') const userTsConfigJson = path.resolve(process.env.UNI_INPUT_DIR, 'tsconfig.json') const defaultTsConfigJson = path.resolve(process.env.UNI_CLI_CONTEXT, 'tsconfig.json') const tsConfigJsonFile = fs.existsSync(userTsConfigJson) ? userTsConfigJson : defaultTsConfigJson const context = isInHBuilderX ? process.env.UNI_INPUT_DIR : process.env.UNI_CLI_CONTEXT function resolveModule (dir) { return path.resolve(process.env.UNI_CLI_CONTEXT, './node_modules', dir) } return { context, configFile: tsConfigJsonFile, compilerOptions: { baseUrl: context, typeRoots: [ resolveModule('@dcloudio/types'), resolveModule('@types'), path.resolve(process.env.UNI_CLI_CONTEXT, 'types') ], types: [ 'uni-app', 'uni-app-vue2', 'webpack-env' ], paths: { '@/*': [ path.join(process.env.UNI_INPUT_DIR, '*') ], vue: [ resolveModule('vue') ], vuex: [ resolveModule('vuex') ], 'vue-class-component': [ resolveModule('vue-class-component') ], 'vue-property-decorator': [ resolveModule('vue-property-decorator') ], tslib: [ resolveModule('tslib') ], 'mpvue-page-factory': [ resolveModule('@dcloudio/vue-cli-plugin-uni/packages/mpvue-page-factory') ], '@vue/composition-api': [ resolveModule('@dcloudio/vue-cli-plugin-uni/packages/@vue/composition-api') ], '@dcloudio/uni-app': [ resolveModule('@dcloudio/uni-app') ] } }, errorFormatter (error, colors) { const messageColor = error.severity === 'warning' ? colors.bold.yellow : colors.bold.red const filePath = path.relative(process.env.UNI_INPUT_DIR, error.file).replace('.vue.ts', '.vue') if (error.code === 2307 && error.content.includes('.vue')) { error.content = error.content.replace('Cannot find module ', '') + ' script 节点必须使用 lang="ts",文档参考地址:https://uniapp.dcloud.io/frame?id=vue-ts' } return messageColor( `[tsl] ERROR at ${filePath}:${error.line} TS${error.code}:${error.content}` ) } } } }