diff --git a/lib/h5/uni.config.js b/lib/h5/uni.config.js index 46f6b98e269645bfae80597f77245bf739f51475..60be35d01b94deb343aafabbe21646af88cc27ee 100644 --- a/lib/h5/uni.config.js +++ b/lib/h5/uni.config.js @@ -1,7 +1,7 @@ const fs = require('fs') const path = require('path') -function getTemplatePath (template) { +function getTemplatePath(template) { if (template) { const userTemplate = path.resolve(process.env.UNI_INPUT_DIR, template) if (fs.existsSync(userTemplate)) @@ -40,12 +40,16 @@ module.exports = { vue: '@dcloudio/vue-cli-plugin-uni/packages/h5-vue' }, copyWebpackOptions(platformOptions, vueOptions) { - return [{ + const copyOptions = [{ from: require.resolve('@dcloudio/uni-h5/dist/index.css'), to: getIndexCssPath(vueOptions.assetsDir, platformOptions.template), transform }, 'hybrid/html' ] + global.uniModules.forEach(module => { + copyOptions.push('uni_modules/' + module + '/hybrid/html') + }) + return copyOptions } -} +} diff --git a/packages/uni-app-plus/lib/uni.config.js b/packages/uni-app-plus/lib/uni.config.js index 665a0f49567abb69b73e326a865895e0ab078709..2241958b9442940c5d5e77ea0d4932b7abbb5ba9 100644 --- a/packages/uni-app-plus/lib/uni.config.js +++ b/packages/uni-app-plus/lib/uni.config.js @@ -33,6 +33,9 @@ module.exports = { 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')) diff --git a/packages/uni-mp-alipay/lib/uni.config.js b/packages/uni-mp-alipay/lib/uni.config.js index 162b12418e146bc3163b3aa4d53b37773d696847..4baf785d6f572709b3eeb467261fc0c3c5bf74ce 100644 --- a/packages/uni-mp-alipay/lib/uni.config.js +++ b/packages/uni-mp-alipay/lib/uni.config.js @@ -4,8 +4,8 @@ module.exports = { cssVars: { '--status-bar-height': '25px', '--window-top': '0px', - '--window-bottom': '0px', - '--window-left': '0px', + '--window-bottom': '0px', + '--window-left': '0px', '--window-right': '0px' }, extnames: { @@ -17,6 +17,10 @@ module.exports = { subPackages: true }, copyWebpackOptions (platformOptions, vueOptions) { - return ['mycomponents'] + const copyOptions = ['mycomponents'] + global.uniModules.forEach(module => { + copyOptions.push('uni_modules/' + module + '/mycomponents') + }) + return copyOptions } } diff --git a/packages/uni-mp-baidu/lib/uni.config.js b/packages/uni-mp-baidu/lib/uni.config.js index ad8a64c6d1b6855ccd37cfabccedd5463033b776..38afcfef3c8d1854681d84414ae1a6eb7ec2e23a 100644 --- a/packages/uni-mp-baidu/lib/uni.config.js +++ b/packages/uni-mp-baidu/lib/uni.config.js @@ -3,8 +3,8 @@ module.exports = { cssVars: { '--status-bar-height': '25px', '--window-top': '0px', - '--window-bottom': '0px', - '--window-left': '0px', + '--window-bottom': '0px', + '--window-left': '0px', '--window-right': '0px' }, extnames: { @@ -17,6 +17,10 @@ module.exports = { subPackages: true }, copyWebpackOptions (platformOptions, vueOptions) { - return ['swancomponents'] + const copyOptions = ['swancomponents'] + global.uniModules.forEach(module => { + copyOptions.push('uni_modules/' + module + '/swancomponents') + }) + return copyOptions } } diff --git a/packages/uni-mp-kuaishou/lib/uni.config.js b/packages/uni-mp-kuaishou/lib/uni.config.js index a18300748e76a0e9ac2a3dc13e6f6f00f0040f56..5af7798fab53fef7514406bb5e8ecdbae37befa5 100644 --- a/packages/uni-mp-kuaishou/lib/uni.config.js +++ b/packages/uni-mp-kuaishou/lib/uni.config.js @@ -3,8 +3,8 @@ module.exports = { cssVars: { '--status-bar-height': '25px', '--window-top': '0px', - '--window-bottom': '0px', - '--window-left': '0px', + '--window-bottom': '0px', + '--window-left': '0px', '--window-right': '0px' }, extnames: { @@ -14,6 +14,10 @@ module.exports = { project: 'project.ks.json' }, copyWebpackOptions (platformOptions, vueOptions) { - return ['kscomponents'] + const copyOptions = ['kscomponents'] + global.uniModules.forEach(module => { + copyOptions.push('uni_modules/' + module + '/kscomponents') + }) + return copyOptions } -} +} diff --git a/packages/uni-mp-qq/lib/uni.config.js b/packages/uni-mp-qq/lib/uni.config.js index fa69999c2cccd377938ebc6436898f0dce5bbcb8..96bbb194af1b21d0dad4bc757664fca4617dcea9 100644 --- a/packages/uni-mp-qq/lib/uni.config.js +++ b/packages/uni-mp-qq/lib/uni.config.js @@ -8,8 +8,8 @@ module.exports = { cssVars: { '--status-bar-height': '25px', '--window-top': '0px', - '--window-bottom': '0px', - '--window-left': '0px', + '--window-bottom': '0px', + '--window-left': '0px', '--window-right': '0px' }, extnames: { @@ -38,6 +38,16 @@ module.exports = { ignore: ['**/*.vue', '**/*.css'] // v3 会自动转换生成vue,css文件,需要过滤 }) } + global.uniModules.forEach(module => { + const wxcomponentsDir = path.resolve(process.env.UNI_INPUT_DIR, 'uni_modules', module, COMPONENTS_DIR_NAME) + if (fs.existsSync(wxcomponentsDir)) { + copyOptions.push({ + from: wxcomponentsDir, + to: 'uni_modules/' + module + '/' + COMPONENTS_DIR_NAME, + ignore: ['**/*.vue', '**/*.css'] // v3 会自动转换生成vue,css文件,需要过滤 + }) + } + }) return copyOptions } } diff --git a/packages/uni-mp-toutiao/lib/uni.config.js b/packages/uni-mp-toutiao/lib/uni.config.js index cb2a821021606f67d9918d721b79fe44142ecafc..fd1eb36a508bb7acd1fb486bd92b69d6b46d7410 100644 --- a/packages/uni-mp-toutiao/lib/uni.config.js +++ b/packages/uni-mp-toutiao/lib/uni.config.js @@ -3,8 +3,8 @@ module.exports = { cssVars: { '--status-bar-height': '25px', '--window-top': '0px', - '--window-bottom': '0px', - '--window-left': '0px', + '--window-bottom': '0px', + '--window-left': '0px', '--window-right': '0px' }, extnames: { @@ -14,6 +14,10 @@ module.exports = { project: 'project.tt.json' }, copyWebpackOptions (platformOptions, vueOptions) { - return ['ttcomponents'] + const copyOptions = ['ttcomponents'] + global.uniModules.forEach(module => { + copyOptions.push('uni_modules/' + module + '/ttcomponents') + }) + return copyOptions } } diff --git a/packages/uni-mp-weixin/lib/uni.config.js b/packages/uni-mp-weixin/lib/uni.config.js index 6dba971a3d0423d33e65b09bc3ff5299f22287e6..8cf180bc6c0bd841d3160c0d42b8788f9c0aa92f 100644 --- a/packages/uni-mp-weixin/lib/uni.config.js +++ b/packages/uni-mp-weixin/lib/uni.config.js @@ -8,8 +8,8 @@ module.exports = { cssVars: { '--status-bar-height': '25px', '--window-top': '0px', - '--window-bottom': '0px', - '--window-left': '0px', + '--window-bottom': '0px', + '--window-left': '0px', '--window-right': '0px' }, extnames: { @@ -23,7 +23,7 @@ module.exports = { darkmode: true }, copyWebpackOptions (platformOptions, vueOptions) { - const copyOptions = [ + const copyOptions = [ 'theme.json', 'sitemap.json', 'ext.json', @@ -40,6 +40,16 @@ module.exports = { ignore: ['**/*.vue', '**/*.css'] // v3 会自动转换生成vue,css文件,需要过滤 }) } + global.uniModules.forEach(module => { + const wxcomponentsDir = path.resolve(process.env.UNI_INPUT_DIR, 'uni_modules', module, COMPONENTS_DIR_NAME) + if (fs.existsSync(wxcomponentsDir)) { + copyOptions.push({ + from: wxcomponentsDir, + to: 'uni_modules/' + module + '/' + COMPONENTS_DIR_NAME, + ignore: ['**/*.vue', '**/*.css'] // v3 会自动转换生成vue,css文件,需要过滤 + }) + } + }) return copyOptions } } diff --git a/packages/vue-cli-plugin-uni/lib/copy-webpack-options.js b/packages/vue-cli-plugin-uni/lib/copy-webpack-options.js index 3efe222e7a952df368f77139fb3c806b4fc71ab1..bc4c0eac05032c77de89a5ca0588a41d64925873 100644 --- a/packages/vue-cli-plugin-uni/lib/copy-webpack-options.js +++ b/packages/vue-cli-plugin-uni/lib/copy-webpack-options.js @@ -51,8 +51,16 @@ function getAssetsCopyOptions (assetsDir) { return copyOptions } +function getUniModulesAssetsCopyOptions (assetsDir) { + const copyOptions = [] + global.uniModules.forEach(module => { + copyOptions.push(...getAssetsCopyOptions('uni_modules/' + module + '/' + assetsDir)) + }) + return copyOptions +} + function getCopyWebpackPluginOptions (platformOptions, vueOptions) { - const copyOptions = getAssetsCopyOptions(assetsDir) + const copyOptions = getAssetsCopyOptions(assetsDir).concat(getUniModulesAssetsCopyOptions(assetsDir)) global.uniPlugin.copyWebpackOptions.forEach(copyWebpackOptions => { const platformCopyOptions = copyWebpackOptions(platformOptions, vueOptions, copyOptions) || [] platformCopyOptions.forEach(copyOption => { diff --git a/packages/vue-cli-plugin-uni/lib/env.js b/packages/vue-cli-plugin-uni/lib/env.js index 2b81150edfe9a68ed741648b5f6ff4a83c93f218..6363bdc08cf7d09d1ac871d8a2a705f27701f007 100644 --- a/packages/vue-cli-plugin-uni/lib/env.js +++ b/packages/vue-cli-plugin-uni/lib/env.js @@ -19,6 +19,7 @@ process.env.UNI_INPUT_DIR = process.env.UNI_INPUT_DIR || path.resolve(process.cw // 初始化全局插件对象 global.uniPlugin = require('@dcloudio/uni-cli-shared/lib/plugin').init() + const manifestJsonObj = require('@dcloudio/uni-cli-shared/lib/manifest').getManifestJson() const platformOptions = manifestJsonObj[process.env.UNI_SUB_PLATFORM || process.env.UNI_PLATFORM] || {} // 插件校验环境 @@ -103,6 +104,17 @@ if (process.env.NODE_ENV === 'production') { // 发行模式,不启用 cache delete process.env.UNI_USING_CACHE } +global.uniModules = [] +try { + global.uniModules = fs + .readdirSync(path.resolve(process.env.UNI_INPUT_DIR, 'uni_modules')) + .filter(module => + fs.existsSync( + path.resolve(process.env.UNI_INPUT_DIR, 'uni_modules', module, 'package.json') + ) + ) +} catch (e) {} + const { normalizePath, isSupportSubPackages, diff --git a/packages/webpack-uni-pages-loader/lib/uni_modules.js b/packages/webpack-uni-pages-loader/lib/uni_modules.js index a1db448a2d71f12bccfd925aa9a81f3e3c2979ab..e2d27ee6b2bdf95e2bf41206f06d9c5ccc66933d 100644 --- a/packages/webpack-uni-pages-loader/lib/uni_modules.js +++ b/packages/webpack-uni-pages-loader/lib/uni_modules.js @@ -22,12 +22,8 @@ function normalizeUniModulesPagesJson (pagesJson, pluginId) { module.exports = function parsePages (content) { const uniModulesDir = path.resolve(process.env.UNI_INPUT_DIR, 'uni_modules') - let plugins = [] - try { - plugins = fs.readdirSync(uniModulesDir) - } catch (e) {} const pluginPagesJsons = [] - plugins.forEach(plugin => { + global.uniModules.forEach(plugin => { const pagesJsonPath = path.resolve(uniModulesDir, plugin, 'pages.json') if (fs.existsSync(pagesJsonPath)) { pluginPagesJsons.push(