const fs = require('fs') const path = require('path') const COMPONENTS_DIR_NAME = 'wxcomponents' function getComponentsCopyOption () { if (process.env.UNI_OUTPUT_TMP_DIR) { // TODO v3不需要,即将废弃 const componentsDir = path.resolve(process.env.UNI_INPUT_DIR, COMPONENTS_DIR_NAME) const CopyWebpackPluginVersion = Number(require('copy-webpack-plugin/package.json').version.split('.')[0]) if (fs.existsSync(componentsDir)) { const ignore = ['**/*.vue', '**/*.css'] return Object.assign({ from: componentsDir, to: COMPONENTS_DIR_NAME }, CopyWebpackPluginVersion > 5 ? { globOptions: { ignore } } : { ignore }) } } } module.exports = { options: { extnames: { // TODO v3不需要此配置 style: '.wxss', template: '.wxml', filter: '.wxs' }, filterTag: 'wxs', subPackages: true }, copyWebpackOptions (platformOptions, vueOptions) { const copyOptions = [] const componentsCopyOption = getComponentsCopyOption() if (componentsCopyOption) { copyOptions.push(componentsCopyOption) } copyOptions.push('hybrid/html') global.uniModules.forEach(module => { copyOptions.push('uni_modules/' + module + '/hybrid/html') }) if (process.env.UNI_USING_V3) { // TODO 将仅保留v3逻辑 copyOptions.push(path.resolve(__dirname, '../dist/view.css')) copyOptions.push(path.resolve(__dirname, '../dist/view.umd.min.js')) // TODO 后续common与v3目录应该合并 copyOptions.push(path.resolve(__dirname, process.env.UNI_USING_NVUE_COMPILER ? '../template/common' : '../template/weex')) copyOptions.push(path.resolve(__dirname, '../template/v3')) } return copyOptions }, chainWebpack (config, vueOptions) { const isAppService = vueOptions.pluginOptions && !!vueOptions.pluginOptions['uni-app-plus'].service if (isAppService) { const subPackages = Object.keys(process.UNI_SUBPACKAGES) if (process.env.UNI_OPT_SUBPACKAGES && subPackages.length) { config .plugin('uni-app-plus-subpackages') .use(require('./plugin/sub-packages-plugin')) } } if (process.env.NODE_ENV === 'production') { config.optimization.minimizer('terser').tap((args) => { if (!args[0].terserOptions.output) { args[0].terserOptions.output = {} } args[0].terserOptions.output.ascii_only = true return args }) } } }