提交 c265a947 编写于 作者: D DCloud_LXH

feat(mp): mp-weixin、mp-alipay 支持导出到插件

上级 5bdc3651
...@@ -25,12 +25,14 @@ module.exports = { ...@@ -25,12 +25,14 @@ module.exports = {
copyOptions.push('uni_modules/' + module + '/mycomponents') copyOptions.push('uni_modules/' + module + '/mycomponents')
}) })
if (process.env.UNI_MP_PLUGIN) { JSON.parse(process.env.UNI_MP_PLUGIN_EXPORT)
copyOptions.push({ .concat(process.env.UNI_MP_PLUGIN ? 'plugin.json' : undefined)
from: path.resolve(process.env.UNI_INPUT_DIR, 'plugin.json'), .forEach(fileName => {
transform: content => JSON.stringify(parseJson(content.toString(), true)) 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 return copyOptions
} }
......
...@@ -32,12 +32,14 @@ module.exports = { ...@@ -32,12 +32,14 @@ module.exports = {
'functional-pages' 'functional-pages'
] ]
if (process.env.UNI_MP_PLUGIN) { JSON.parse(process.env.UNI_MP_PLUGIN_EXPORT)
copyOptions.push({ .concat(process.env.UNI_MP_PLUGIN ? 'plugin.json' : undefined)
from: path.resolve(process.env.UNI_INPUT_DIR, 'plugin.json'), .forEach(fileName => {
transform: content => JSON.stringify(parseJson(content.toString(), true)) 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 const workers = platformOptions.workers
workers && copyOptions.push(workers) workers && copyOptions.push(workers)
......
...@@ -49,6 +49,9 @@ process.env.UNI_USING_V3_SCOPED = true ...@@ -49,6 +49,9 @@ process.env.UNI_USING_V3_SCOPED = true
process.env.UNI_CLOUD_PROVIDER = JSON.stringify([]) 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 isH5 = !process.env.UNI_SUB_PLATFORM && process.env.UNI_PLATFORM === 'h5'
const isProduction = process.env.NODE_ENV === 'production' const isProduction = process.env.NODE_ENV === 'production'
......
...@@ -138,6 +138,10 @@ function initSubpackageConfig (webpackConfig, vueOptions) { ...@@ -138,6 +138,10 @@ function initSubpackageConfig (webpackConfig, vueOptions) {
webpackConfig.output.jsonpFunction('webpackJsonp_' + (process.env.UNI_SUBPACKGE || process.env.UNI_MP_PLUGIN)) 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 = { module.exports = {
vueConfig: { vueConfig: {
parallel: false parallel: false
...@@ -171,18 +175,21 @@ module.exports = { ...@@ -171,18 +175,21 @@ module.exports = {
plugins.push(new PreprocessAssetsPlugin()) plugins.push(new PreprocessAssetsPlugin())
} }
if (process.env.UNI_MP_PLUGIN) { {
// 小程序插件入口使用 const globalEnv = process.env.UNI_PLATFORM === 'mp-alipay' ? 'my' : 'wx'
// packages\webpack-uni-mp-loader\lib\plugin\index-new.js -> addMPPluginRequire if (process.env.UNI_MP_PLUGIN) {
beforeCode += `${process.env.UNI_PLATFORM === 'mp-alipay' ? 'my' : 'wx'}.__webpack_require_${process.env.UNI_MP_PLUGIN.replace(/-/g, '_')}__ = __webpack_require__;` // 小程序插件入口使用
// 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 beforeCode += `${globalEnv}.__webpack_require_${process.env.UNI_MP_PLUGIN.replace(/-/g, '_')}__ = __webpack_require__;`
if (UNI_MP_PLUGIN_MAIN) { } else {
process.UNI_ENTRY[UNI_MP_PLUGIN_MAIN.split('.')[0]] = path.resolve(process.env.UNI_INPUT_DIR, beforeCode += `${globalEnv}.__webpack_require_UNI_MP_PLUGIN__ = __webpack_require__;`
UNI_MP_PLUGIN_MAIN)
} }
} }
JSON.parse(process.env.UNI_MP_PLUGIN_EXPORT).forEach(fileName => addToUniEntry(fileName))
const alias = { // 仅 mp-weixin const alias = { // 仅 mp-weixin
'mpvue-page-factory': require.resolve( 'mpvue-page-factory': require.resolve(
'@dcloudio/vue-cli-plugin-uni/packages/mpvue-page-factory') '@dcloudio/vue-cli-plugin-uni/packages/mpvue-page-factory')
......
...@@ -67,33 +67,33 @@ function addSubPackagesRequire (compilation) { ...@@ -67,33 +67,33 @@ function addSubPackagesRequire (compilation) {
function addMPPluginRequire (compilation) { function addMPPluginRequire (compilation) {
// 编译到小程序插件 特殊处理入口文件 // 编译到小程序插件 特殊处理入口文件
if (process.env.UNI_MP_PLUGIN) { const assetsKeys = Object.keys(compilation.assets)
const assetsKeys = Object.keys(compilation.assets) const UNI_MP_PLUGIN_MAIN = process.env.UNI_MP_PLUGIN_MAIN
assetsKeys.forEach(name => { const UNI_MP_PLUGIN_EXPORT = JSON.parse(process.env.UNI_MP_PLUGIN_EXPORT)
if (name === process.env.UNI_MP_PLUGIN_MAIN) { assetsKeys.forEach(name => {
const modules = compilation.modules 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) + 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` + `\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].source().substring(newlineIndex + 1)
compilation.assets[name] = { compilation.assets[name] = {
size () { size () {
return Buffer.byteLength(source, 'utf8') return Buffer.byteLength(source, 'utf8')
}, },
source () { source () {
return source return source
}
} }
} }
}) }
} })
} }
class WebpackUniMPPlugin { class WebpackUniMPPlugin {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册