diff --git a/packages/uni-cli-shared/lib/platform.js b/packages/uni-cli-shared/lib/platform.js index 81e66afd06aad24a91156672b63329c192737284..c165ee5a114a0ed9f1876e732a3ac74df0ac9875 100644 --- a/packages/uni-cli-shared/lib/platform.js +++ b/packages/uni-cli-shared/lib/platform.js @@ -103,18 +103,39 @@ const PLATFORMS = { copyWebpackOptions ({ assetsDir }) { + const indexCssCopyOptions = [{ + from: require.resolve('@dcloudio/uni-h5/dist/index.css'), + to: assetsDir, + transform (content) { + if (process.env.NODE_ENV === 'production') { + return content + getShadowCss() + } + return content + } + }] + const VUE_APP_INDEX_CSS_HASH = process.env.VUE_APP_INDEX_CSS_HASH + if (VUE_APP_INDEX_CSS_HASH) { + const { + getH5Options + } = require('./manifest') + const { + template + } = getH5Options() + const to = path.join(assetsDir, `[name].${VUE_APP_INDEX_CSS_HASH}.[ext]`) + if (process.env.NODE_ENV === 'production') { + const templateContent = fs.readFileSync(template, { encoding: 'utf8' }) + if (/\bVUE_APP_INDEX_CSS_HASH\b/.test(templateContent)) { + indexCssCopyOptions[0].to = to + } + } else { + const indexCssCopyOption = Object.assign({}, indexCssCopyOptions[0]) + indexCssCopyOption.to = to + indexCssCopyOptions.push(indexCssCopyOption) + } + } return [ ...getStaticCopyOptions(assetsDir), - { - from: require.resolve('@dcloudio/uni-h5/dist/index.css'), - to: assetsDir, - transform (content) { - if (process.env.NODE_ENV === 'production') { - return content + getShadowCss() - } - return content - } - }, + ...indexCssCopyOptions, ...getCopyOptions(['hybrid/html']) ] } @@ -564,4 +585,4 @@ module.exports = { getPlatformSass () { return SASS } -} +} diff --git a/packages/vue-cli-plugin-uni/lib/env.js b/packages/vue-cli-plugin-uni/lib/env.js index 57226787d67d022b5607056139b4f4654621f33d..86f20563123c1758a7583c954bd4a379d9a0d3a2 100644 --- a/packages/vue-cli-plugin-uni/lib/env.js +++ b/packages/vue-cli-plugin-uni/lib/env.js @@ -1,6 +1,7 @@ const fs = require('fs') const path = require('path') const mkdirp = require('mkdirp') +const loaderUtils = require('loader-utils') // 初始化环境变量 const defaultInputDir = '../../../../src' @@ -109,6 +110,8 @@ if (process.env.UNI_PLATFORM === 'h5') { process.env.UNI_OPT_PRELOAD = true } } + const buffer = fs.readFileSync(require.resolve('@dcloudio/uni-h5/dist/index.css')) + process.env.VUE_APP_INDEX_CSS_HASH = loaderUtils.getHashDigest(buffer, 'md5', 'hex', 8) } if (process.env.UNI_PLATFORM === 'mp-qq') { // QQ小程序 强制自定义组件模式 @@ -259,7 +262,7 @@ moduleAlias.addAlias('mpvue-template-compiler', '@dcloudio/vue-cli-plugin-uni/pa if (process.env.UNI_USING_V3 && process.env.UNI_PLATFORM === 'app-plus') { moduleAlias.addAlias('vue-style-loader', '@dcloudio/vue-cli-plugin-uni/packages/app-vue-style-loader') -} +} // vue cache if ( // 非 h5 ,非 v3,非 native @@ -320,4 +323,4 @@ runByHBuilderX && console.log(`正在编译中...`) module.exports = { manifestPlatformOptions: platformOptions -} +}