diff --git a/packages/uni-mp-alipay/lib/uni.config.js b/packages/uni-mp-alipay/lib/uni.config.js index 3d03fb09dbd66b8cab35e36697a3e962e5b5528c..b1b78060fac74c7b6e6cd095afb91adabd588dce 100644 --- a/packages/uni-mp-alipay/lib/uni.config.js +++ b/packages/uni-mp-alipay/lib/uni.config.js @@ -25,12 +25,14 @@ module.exports = { copyOptions.push('uni_modules/' + module + '/mycomponents') }) - if (process.env.UNI_MP_PLUGIN) { - copyOptions.push({ - from: path.resolve(process.env.UNI_INPUT_DIR, 'plugin.json'), - transform: content => JSON.stringify(parseJson(content.toString(), true)) + JSON.parse(process.env.UNI_MP_PLUGIN_EXPORT) + .concat(process.env.UNI_MP_PLUGIN ? 'plugin.json' : undefined) + .forEach(fileName => { + fileName && copyOptions.push({ + from: path.resolve(process.env.UNI_INPUT_DIR, fileName), + transform: content => fileName === 'plugin.json' ? JSON.stringify(parseJson(content.toString(), true)) : content + }) }) - } return copyOptions } diff --git a/packages/uni-mp-weixin/lib/uni.config.js b/packages/uni-mp-weixin/lib/uni.config.js index 8ffbc50ce51e49841bc8297fa13f32717585d387..c6ef0d0a82b887dfc5f2be5628b9092f2cefba55 100644 --- a/packages/uni-mp-weixin/lib/uni.config.js +++ b/packages/uni-mp-weixin/lib/uni.config.js @@ -32,12 +32,14 @@ module.exports = { 'functional-pages' ] - if (process.env.UNI_MP_PLUGIN) { - copyOptions.push({ - from: path.resolve(process.env.UNI_INPUT_DIR, 'plugin.json'), - transform: content => JSON.stringify(parseJson(content.toString(), true)) + JSON.parse(process.env.UNI_MP_PLUGIN_EXPORT) + .concat(process.env.UNI_MP_PLUGIN ? 'plugin.json' : undefined) + .forEach(fileName => { + fileName && copyOptions.push({ + from: path.resolve(process.env.UNI_INPUT_DIR, fileName), + transform: content => fileName === 'plugin.json' ? JSON.stringify(parseJson(content.toString(), true)) : content + }) }) - } const workers = platformOptions.workers workers && copyOptions.push(workers) diff --git a/packages/vue-cli-plugin-uni/lib/env.js b/packages/vue-cli-plugin-uni/lib/env.js index 2ce61cf9add3898f1e8598feed65f39a30d7d7e3..d39c383a6db63628b7cbe9be6ae273f0a7f2f2e0 100644 --- a/packages/vue-cli-plugin-uni/lib/env.js +++ b/packages/vue-cli-plugin-uni/lib/env.js @@ -49,6 +49,9 @@ process.env.UNI_USING_V3_SCOPED = true process.env.UNI_CLOUD_PROVIDER = JSON.stringify([]) +// 导出到小程序插件 +process.env.UNI_MP_PLUGIN_EXPORT = JSON.stringify(Object.keys(platformOptions.plugins || {}).map(pluginName => platformOptions.plugins[pluginName].export)) + const isH5 = !process.env.UNI_SUB_PLATFORM && process.env.UNI_PLATFORM === 'h5' const isProduction = process.env.NODE_ENV === 'production' diff --git a/packages/vue-cli-plugin-uni/lib/mp/index.js b/packages/vue-cli-plugin-uni/lib/mp/index.js index 99d4af1cea7abec009538dd542b5961b63dbe79e..61d16df988fdc5f87981ef761c19f045479c5893 100644 --- a/packages/vue-cli-plugin-uni/lib/mp/index.js +++ b/packages/vue-cli-plugin-uni/lib/mp/index.js @@ -138,6 +138,10 @@ function initSubpackageConfig (webpackConfig, vueOptions) { webpackConfig.output.jsonpFunction('webpackJsonp_' + (process.env.UNI_SUBPACKGE || process.env.UNI_MP_PLUGIN)) } +function addToUniEntry (fileName) { + fileName && (process.UNI_ENTRY[fileName.split('.')[0]] = path.resolve(process.env.UNI_INPUT_DIR, fileName)) +} + module.exports = { vueConfig: { parallel: false @@ -171,18 +175,21 @@ module.exports = { plugins.push(new PreprocessAssetsPlugin()) } - if (process.env.UNI_MP_PLUGIN) { - // 小程序插件入口使用 - // packages\webpack-uni-mp-loader\lib\plugin\index-new.js -> addMPPluginRequire - beforeCode += `${process.env.UNI_PLATFORM === 'mp-alipay' ? 'my' : 'wx'}.__webpack_require_${process.env.UNI_MP_PLUGIN.replace(/-/g, '_')}__ = __webpack_require__;` + { + const globalEnv = process.env.UNI_PLATFORM === 'mp-alipay' ? 'my' : 'wx' + if (process.env.UNI_MP_PLUGIN) { + // 小程序插件入口使用 + // packages\webpack-uni-mp-loader\lib\plugin\index-new.js -> addMPPluginRequire + addToUniEntry(process.env.UNI_MP_PLUGIN_MAIN) - const UNI_MP_PLUGIN_MAIN = process.env.UNI_MP_PLUGIN_MAIN - if (UNI_MP_PLUGIN_MAIN) { - process.UNI_ENTRY[UNI_MP_PLUGIN_MAIN.split('.')[0]] = path.resolve(process.env.UNI_INPUT_DIR, - UNI_MP_PLUGIN_MAIN) + beforeCode += `${globalEnv}.__webpack_require_${process.env.UNI_MP_PLUGIN.replace(/-/g, '_')}__ = __webpack_require__;` + } else { + beforeCode += `${globalEnv}.__webpack_require_UNI_MP_PLUGIN__ = __webpack_require__;` } } + JSON.parse(process.env.UNI_MP_PLUGIN_EXPORT).forEach(fileName => addToUniEntry(fileName)) + const alias = { // 仅 mp-weixin 'mpvue-page-factory': require.resolve( '@dcloudio/vue-cli-plugin-uni/packages/mpvue-page-factory') diff --git a/packages/webpack-uni-mp-loader/lib/plugin/index-new.js b/packages/webpack-uni-mp-loader/lib/plugin/index-new.js index 8c3fa3e87114af66d55f4cb8f93a35b2943e7e32..231e201f20423e4641d3055d3bf7a02d4c838df6 100644 --- a/packages/webpack-uni-mp-loader/lib/plugin/index-new.js +++ b/packages/webpack-uni-mp-loader/lib/plugin/index-new.js @@ -67,33 +67,33 @@ function addSubPackagesRequire (compilation) { function addMPPluginRequire (compilation) { // 编译到小程序插件 特殊处理入口文件 - if (process.env.UNI_MP_PLUGIN) { - const assetsKeys = Object.keys(compilation.assets) - assetsKeys.forEach(name => { - if (name === process.env.UNI_MP_PLUGIN_MAIN) { - const modules = compilation.modules + const assetsKeys = Object.keys(compilation.assets) + const UNI_MP_PLUGIN_MAIN = process.env.UNI_MP_PLUGIN_MAIN + const UNI_MP_PLUGIN_EXPORT = JSON.parse(process.env.UNI_MP_PLUGIN_EXPORT) + assetsKeys.forEach(name => { + if ((name === UNI_MP_PLUGIN_MAIN && process.env.UNI_MP_PLUGIN) || UNI_MP_PLUGIN_EXPORT.includes(name)) { + const modules = compilation.modules - const mainFilePath = normalizePath(path.resolve(process.env.UNI_INPUT_DIR, process.env.UNI_MP_PLUGIN_MAIN)) + const filePath = normalizePath(path.resolve(process.env.UNI_INPUT_DIR, name)) - const uniModuleId = modules.find(module => module.resource && normalizePath(module.resource) === mainFilePath).id + const uniModuleId = modules.find(module => module.resource && normalizePath(module.resource) === filePath).id - const newlineIndex = compilation.assets[name].source().lastIndexOf('\n') + const newlineIndex = compilation.assets[name].source().lastIndexOf('\n') - const source = compilation.assets[name].source().substring(0, newlineIndex) + - `\nmodule.exports = ${process.env.UNI_PLATFORM === 'mp-alipay' ? 'my' : 'wx'}.__webpack_require_${process.env.UNI_MP_PLUGIN.replace(/-/g, '_')}__('${uniModuleId}');\n` + - compilation.assets[name].source().substring(newlineIndex + 1) + const source = compilation.assets[name].source().substring(0, newlineIndex) + + `\nmodule.exports = ${process.env.UNI_PLATFORM === 'mp-alipay' ? 'my' : 'wx'}.__webpack_require_${(process.env.UNI_MP_PLUGIN || 'UNI_MP_PLUGIN').replace(/-/g, '_')}__('${uniModuleId}');\n` + + compilation.assets[name].source().substring(newlineIndex + 1) - compilation.assets[name] = { - size () { - return Buffer.byteLength(source, 'utf8') - }, - source () { - return source - } + compilation.assets[name] = { + size () { + return Buffer.byteLength(source, 'utf8') + }, + source () { + return source } } - }) - } + } + }) } class WebpackUniMPPlugin {