diff --git a/build/rollup.config.mp.js b/build/rollup.config.mp.js index fbf3b7e2ccc8846e92e8429af7c385acc8c61a7f..97c7385889eeb0fc080b8c9e843df34b5b2af533 100644 --- a/build/rollup.config.mp.js +++ b/build/rollup.config.mp.js @@ -23,6 +23,10 @@ const PLATFORMS = { prefix: 'tt', title: '头条小程序' }, + 'mp-quickapp': { + prefix: 'qa', + title: '快应用(Light)版' + }, 'app-plus': { prefix: 'wx', title: 'app-plus' diff --git a/package.json b/package.json index ad8e5699cc8bd0257aefff17d6fc36f35455fa5d..964ba4e02dd256475e1ce769e27c30b9ffe8678e 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,8 @@ "build:mp-weixin": "cross-env UNI_PLATFORM=mp-weixin rollup -c build/rollup.config.mp.js", "build:mp-baidu": "cross-env UNI_PLATFORM=mp-baidu rollup -c build/rollup.config.mp.js", "build:mp-alipay": "cross-env UNI_PLATFORM=mp-alipay rollup -c build/rollup.config.mp.js", - "build:mp-toutiao": "cross-env UNI_PLATFORM=mp-toutiao rollup -c build/rollup.config.mp.js", + "build:mp-toutiao": "cross-env UNI_PLATFORM=mp-toutiao rollup -c build/rollup.config.mp.js", + "build:mp-quickapp": "cross-env UNI_PLATFORM=mp-quickapp rollup -c build/rollup.config.mp.js", "build:mp-weixin:mp": "npm run lint && cross-env UNI_PLATFORM=mp-weixin UNI_MP=true rollup -c build/rollup.config.mp.js", "build:mp-weixin:wxs": "rollup -c build/rollup.config.wxs.js", "build:quickapp": "cross-env NODE_ENV=development node build/build.qa.js && cross-env NODE_ENV=production node build/build.qa.js", @@ -110,7 +111,8 @@ "my": true, "swan": true, "tt": true, - "qh": true, + "qh": true, + "qa": true, "HWH5": true, "weex": true, "__id__": true, diff --git a/packages/uni-app-plus/lib/uni.compiler.js b/packages/uni-app-plus/lib/uni.compiler.js new file mode 100644 index 0000000000000000000000000000000000000000..c5359656f86597361a6b8474ed7b4a6f8e80eae0 --- /dev/null +++ b/packages/uni-app-plus/lib/uni.compiler.js @@ -0,0 +1 @@ +module.exports = require('@dcloudio/uni-mp-weixin/lib/uni.compiler.js') diff --git a/packages/uni-cli-shared/lib/plugin.js b/packages/uni-cli-shared/lib/plugin.js index 67c2f1234c7daf8116d02ea49364be12a9adca70..c04686410eb1780a765a1efc78f76e4a644bac10 100644 --- a/packages/uni-cli-shared/lib/plugin.js +++ b/packages/uni-cli-shared/lib/plugin.js @@ -24,7 +24,7 @@ function initPlugin (plugin) { try { pluginApi = require(path.join(plugin.id, (plugin.config.main || '/lib/uni.config.js'))) } catch (e) { - console.warn(`缺少 uni.config.js `) + console.warn(`${plugin.id} 缺少 uni.config.js `) } pluginApi && PLUGIN_KEYS.forEach(name => { @@ -45,8 +45,9 @@ const officialPlugins = [ '@dcloudio/uni-h5', '@dcloudio/uni-mp-360', '@dcloudio/uni-mp-alipay', - '@dcloudio/uni-mp-baidu', - '@dcloudio/uni-mp-qq', + '@dcloudio/uni-mp-baidu', + '@dcloudio/uni-mp-qq', + '@dcloudio/uni-mp-quickapp', '@dcloudio/uni-mp-toutiao', '@dcloudio/uni-mp-welink', '@dcloudio/uni-mp-weixin' @@ -118,8 +119,9 @@ module.exports = { initExtends(name, plugin, plugins) initPlugin(plugin) - - Plugin.name = name + + Plugin.name = name + Plugin.id = plugin.id Plugin.config = plugin.config Plugin.platforms = plugins.map(plugin => plugin.name) Plugin.preprocess = initPreprocessContext(name, Plugin.platforms, process.UNI_SCRIPT_DEFINE) diff --git a/packages/uni-template-compiler/lib/platforms/mp-alipay.js b/packages/uni-mp-alipay/lib/uni.compiler.js similarity index 81% rename from packages/uni-template-compiler/lib/platforms/mp-alipay.js rename to packages/uni-mp-alipay/lib/uni.compiler.js index 4dfe6da7b14ff3672df14cc58c016521851ee05c..6978b07c4e8a2199ab180da6185cc7798b9e8049 100644 --- a/packages/uni-template-compiler/lib/platforms/mp-alipay.js +++ b/packages/uni-mp-alipay/lib/uni.compiler.js @@ -1,8 +1,14 @@ -const t = require('@babel/types') +function cached (fn) { + const cache = Object.create(null) + return function cachedFn (str) { + const hit = cache[str] + return hit || (cache[str] = fn(str)) + } +} -const { - capitalize -} = require('../util') +const capitalize = cached(str => { + return str.charAt(0).toUpperCase() + str.slice(1) +}) const EVENTS = { 'click': 'tap', @@ -30,7 +36,7 @@ const EVENTS = { } module.exports = { - prefix: 'a:', + directive: 'a:', specialEvents: { 'form': { 'reset': 'onReset' @@ -79,7 +85,7 @@ module.exports = { }, children: normalizeChildren(traverseExpr(returnExprNodes, state)) } - if (t.isIdentifier(paramExprNode)) { + if (paramExprNode && paramExprNode.type === 'Identifier') { node.scoped = paramExprNode.name } return node diff --git a/packages/uni-template-compiler/lib/platforms/mp-baidu.js b/packages/uni-mp-baidu/lib/uni.compiler.js similarity index 84% rename from packages/uni-template-compiler/lib/platforms/mp-baidu.js rename to packages/uni-mp-baidu/lib/uni.compiler.js index 07079e6197239c7a39d8c4e71ec83f91ed8be93b..405607adf2411dbf0fcb085a70c1475d8c1ce393 100644 --- a/packages/uni-template-compiler/lib/platforms/mp-baidu.js +++ b/packages/uni-mp-baidu/lib/uni.compiler.js @@ -1,7 +1,5 @@ -const t = require('@babel/types') - module.exports = { - prefix: 's-', + directive: 's-', createScopedSlots (slotName, props, state) { const node = { type: 'slot', @@ -28,7 +26,7 @@ module.exports = { }, children: normalizeChildren(traverseExpr(returnExprNodes, state)) } - if (t.isIdentifier(paramExprNode)) { + if (paramExprNode && paramExprNode.type === 'Identifier') { node.scoped = paramExprNode.name } return node diff --git a/packages/uni-mp-qq/lib/uni.compiler.js b/packages/uni-mp-qq/lib/uni.compiler.js new file mode 100644 index 0000000000000000000000000000000000000000..fe75281e2373c3da08780a7b7d29911e23209151 --- /dev/null +++ b/packages/uni-mp-qq/lib/uni.compiler.js @@ -0,0 +1,4 @@ +const compiler = require('@dcloudio/uni-mp-weixin/lib/uni.compiler.js') +module.exports = Object.assign({}, compiler, { + directive: 'qq:' +}) diff --git a/packages/uni-mp-toutiao/lib/uni.compiler.js b/packages/uni-mp-toutiao/lib/uni.compiler.js new file mode 100644 index 0000000000000000000000000000000000000000..cdec14a5ee6cb768e9511434525588414908d9a3 --- /dev/null +++ b/packages/uni-mp-toutiao/lib/uni.compiler.js @@ -0,0 +1,4 @@ +const compiler = require('@dcloudio/uni-mp-weixin/lib/uni.compiler.js') +module.exports = Object.assign({}, compiler, { + directive: 'tt:' +}) diff --git a/packages/uni-template-compiler/lib/platforms/mp-weixin.js b/packages/uni-mp-weixin/lib/uni.compiler.js similarity index 96% rename from packages/uni-template-compiler/lib/platforms/mp-weixin.js rename to packages/uni-mp-weixin/lib/uni.compiler.js index fe2489eae3cc017395b64d97625c892694b2859c..f6aa4d3b4e585c6b925f0e401ebe98901acb4ca4 100644 --- a/packages/uni-template-compiler/lib/platforms/mp-weixin.js +++ b/packages/uni-mp-weixin/lib/uni.compiler.js @@ -4,21 +4,21 @@ const t = require('@babel/types') function generateJsCode (properties = '{}') { return ` -wx.createComponent({ +wx.createComponent({ generic:true, - props: ${properties}, + props: ${properties}, render: function(){} }) ` } module.exports = { - prefix: 'wx:', - createScopedSlots (slotName, props, state) { + directive: 'wx:', + createScopedSlots (slotName, props, state) { const componentName = 'scoped-slots-' + slotName if (!state.componentGenerics) { state.componentGenerics = Object.create(null) - } + } state.componentGenerics[componentName] = true diff --git a/packages/uni-template-compiler/lib/index.js b/packages/uni-template-compiler/lib/index.js index 0a99ef6ed3509133539ed70e396228d02d5b3475..8cf7037ff10f8ca7cea2766cebc761cffd75e22c 100644 --- a/packages/uni-template-compiler/lib/index.js +++ b/packages/uni-template-compiler/lib/index.js @@ -10,7 +10,6 @@ const { ssrCompileToFunctions } = require('@dcloudio/vue-cli-plugin-uni/packages/vue-template-compiler') -const platforms = require('./platforms') const traverseScript = require('./script/traverse') const generateScript = require('./script/generate') const traverseTemplate = require('./template/traverse') @@ -102,7 +101,7 @@ module.exports = { optimize: false }), compile) - options.mp.platform = platforms[options.mp.platform] + options.mp.platform = require('./mp')(options.mp.platform) options.mp.scopeId = options.scopeId diff --git a/packages/uni-template-compiler/lib/platforms/mp-base.js b/packages/uni-template-compiler/lib/mp.js similarity index 85% rename from packages/uni-template-compiler/lib/platforms/mp-base.js rename to packages/uni-template-compiler/lib/mp.js index b7af2fa38d6e049e585aed71ddb9a7683ffa03e0..f63c8152776e1124ded22f6c03b3b1a855109bec 100644 --- a/packages/uni-template-compiler/lib/platforms/mp-base.js +++ b/packages/uni-template-compiler/lib/mp.js @@ -50,7 +50,7 @@ const tags = [ 'editor' ] -module.exports = { +const baseCompiler = { ref: 'data-ref', refInFor: 'data-ref-in-for', specialEvents: {}, @@ -114,4 +114,17 @@ ${content} children: [] } } +} + +module.exports = function getCompilerOptions (platform) { + let id = '@dcloudio/uni-' + platform + if (global.uniPlugin) { + id = global.uniPlugin.id + } + return Object.assign({ + name: platform + }, + baseCompiler, + require(id + '/lib/uni.compiler.js') + ) } diff --git a/packages/uni-template-compiler/lib/platforms/index.js b/packages/uni-template-compiler/lib/platforms/index.js deleted file mode 100644 index 15df9cab37046abeb81d1d6d27bb9091e9a0149c..0000000000000000000000000000000000000000 --- a/packages/uni-template-compiler/lib/platforms/index.js +++ /dev/null @@ -1,26 +0,0 @@ -const mpBase = require('./mp-base') -const mpWeixin = require('./mp-weixin') -const mpBaidu = require('./mp-baidu') -const mpAlipay = require('./mp-alipay') -const mpToutiao = require('./mp-toutiao') - -module.exports = { - 'app-plus': Object.assign({ - name: 'app-plus' - }, mpBase, mpWeixin), - 'mp-weixin': Object.assign({ - name: 'mp-weixin' - }, mpBase, mpWeixin), - 'mp-qq': Object.assign({ - name: 'mp-qq' - }, mpBase, mpWeixin), - 'mp-baidu': Object.assign({ - name: 'mp-baidu' - }, mpBase, mpBaidu), - 'mp-alipay': Object.assign({ - name: 'mp-alipay' - }, mpBase, mpAlipay), - 'mp-toutiao': Object.assign({ - name: 'mp-toutiao' - }, mpBase, mpToutiao) -} diff --git a/packages/uni-template-compiler/lib/platforms/mp-toutiao.js b/packages/uni-template-compiler/lib/platforms/mp-toutiao.js deleted file mode 100644 index 2f954b5fce67b6d90b78fbd4844d9ae91ad4a184..0000000000000000000000000000000000000000 --- a/packages/uni-template-compiler/lib/platforms/mp-toutiao.js +++ /dev/null @@ -1,5 +0,0 @@ -const mpWeixin = require('./mp-weixin') -module.exports = Object.assign({}, mpWeixin, { - prefix: 'tt:' - // ref: 'vue-ref' -}) diff --git a/packages/uni-template-compiler/lib/template/traverse.js b/packages/uni-template-compiler/lib/template/traverse.js index da1f5ba3608cf12dd0035d3e9d46f2f6be4a1e0e..a2007afe94c8a9d04c468f18613746f0742cbf46 100644 --- a/packages/uni-template-compiler/lib/template/traverse.js +++ b/packages/uni-template-compiler/lib/template/traverse.js @@ -101,7 +101,7 @@ function traverseCallExpr (callExprNode, state) { } function traverseConditionalExpr (conditionalExprNode, state) { - const prefix = state.options.platform.prefix + const prefix = state.options.platform.directive const ret = [{ type: 'block', attr: { @@ -258,7 +258,7 @@ function genSlotNode (slotName, slotNode, fallbackNodes, state) { if (!fallbackNodes || t.isNullLiteral(fallbackNodes)) { return slotNode } - const prefix = state.options.platform.prefix + const prefix = state.options.platform.directive return [{ type: 'block', attr: { @@ -381,7 +381,7 @@ function traverseRenderList (callExprNode, state) { const forKey = traverseKey(forReturnStatementArgument, state) - const prefix = state.options.platform.prefix + const prefix = state.options.platform.directive const attr = { [prefix + 'for']: genCode(callExprNode.arguments[0]), diff --git a/packages/vue-cli-plugin-uni/index.js b/packages/vue-cli-plugin-uni/index.js index 2ce41d534299f8642e6a870a26e396c19be4d253..c9f967e3534215a250a9da8fbcc9fab5c5e6685e 100644 --- a/packages/vue-cli-plugin-uni/index.js +++ b/packages/vue-cli-plugin-uni/index.js @@ -41,7 +41,11 @@ module.exports = (api, options) => { return } - const platformOptions = require('./lib/' + process.env.UNI_PLATFORM) + const type = ['app-plus', 'h5'].includes(process.env.UNI_PLATFORM) + ? process.env.UNI_PLATFORM + : 'mp' + + const platformOptions = require('./lib/' + type) let vueConfig = platformOptions.vueConfig diff --git a/packages/vue-cli-plugin-uni/lib/mp-alipay/index.js b/packages/vue-cli-plugin-uni/lib/mp-alipay/index.js deleted file mode 100644 index ce4f85869779a5d21265f66eece9e1baf774d079..0000000000000000000000000000000000000000 --- a/packages/vue-cli-plugin-uni/lib/mp-alipay/index.js +++ /dev/null @@ -1,2 +0,0 @@ -const mp = require('../mp') -module.exports = mp diff --git a/packages/vue-cli-plugin-uni/lib/mp-baidu/index.js b/packages/vue-cli-plugin-uni/lib/mp-baidu/index.js deleted file mode 100644 index ce4f85869779a5d21265f66eece9e1baf774d079..0000000000000000000000000000000000000000 --- a/packages/vue-cli-plugin-uni/lib/mp-baidu/index.js +++ /dev/null @@ -1,2 +0,0 @@ -const mp = require('../mp') -module.exports = mp diff --git a/packages/vue-cli-plugin-uni/lib/mp-qq/index.js b/packages/vue-cli-plugin-uni/lib/mp-qq/index.js deleted file mode 100644 index ce4f85869779a5d21265f66eece9e1baf774d079..0000000000000000000000000000000000000000 --- a/packages/vue-cli-plugin-uni/lib/mp-qq/index.js +++ /dev/null @@ -1,2 +0,0 @@ -const mp = require('../mp') -module.exports = mp diff --git a/packages/vue-cli-plugin-uni/lib/mp-toutiao/index.js b/packages/vue-cli-plugin-uni/lib/mp-toutiao/index.js deleted file mode 100644 index ce4f85869779a5d21265f66eece9e1baf774d079..0000000000000000000000000000000000000000 --- a/packages/vue-cli-plugin-uni/lib/mp-toutiao/index.js +++ /dev/null @@ -1,2 +0,0 @@ -const mp = require('../mp') -module.exports = mp diff --git a/packages/vue-cli-plugin-uni/lib/mp-weixin/index.js b/packages/vue-cli-plugin-uni/lib/mp-weixin/index.js deleted file mode 100644 index ce4f85869779a5d21265f66eece9e1baf774d079..0000000000000000000000000000000000000000 --- a/packages/vue-cli-plugin-uni/lib/mp-weixin/index.js +++ /dev/null @@ -1,2 +0,0 @@ -const mp = require('../mp') -module.exports = mp diff --git a/packages/vue-cli-plugin-uni/lib/mp.js b/packages/vue-cli-plugin-uni/lib/mp/index.js similarity index 87% rename from packages/vue-cli-plugin-uni/lib/mp.js rename to packages/vue-cli-plugin-uni/lib/mp/index.js index a0fb30eb26ab4b955dda3d98e02f64c635c4a0fe..155fa27d5d097f4d2013382f936331759331ab0a 100644 --- a/packages/vue-cli-plugin-uni/lib/mp.js +++ b/packages/vue-cli-plugin-uni/lib/mp/index.js @@ -8,13 +8,13 @@ const { getPlatformCssnano } = require('@dcloudio/uni-cli-shared') -const WebpackUniAppPlugin = require('../packages/webpack-uni-app-loader/plugin/index') +const WebpackUniAppPlugin = require('../../packages/webpack-uni-app-loader/plugin/index') -const modifyVueLoader = require('./vue-loader') +const modifyVueLoader = require('../vue-loader') const { createTemplateCacheLoader -} = require('./cache-loader') +} = require('../cache-loader') function createUniMPPlugin () { const WebpackUniMPPlugin = require('@dcloudio/webpack-uni-mp-loader/lib/plugin/index-new') @@ -23,7 +23,7 @@ function createUniMPPlugin () { function getProvides () { const uniPath = require.resolve('@dcloudio/uni-' + process.env.UNI_PLATFORM) - const uniCloudPath = path.resolve(__dirname, '../packages/uni-cloud/dist/index.js') + const uniCloudPath = path.resolve(__dirname, '../../packages/uni-cloud/dist/index.js') const provides = { 'uni': [uniPath, 'default'], 'uniCloud': [uniCloudPath, 'default'] @@ -39,9 +39,9 @@ function getProvides () { process.env.UNI_PLATFORM === 'app-plus' && process.env.UNI_USING_V8 ) { - provides['__f__'] = [path.resolve(__dirname, 'format-log.js'), 'default'] + provides['__f__'] = [path.resolve(__dirname, '../format-log.js'), 'default'] - const cryptoProvide = [path.resolve(__dirname, 'crypto.js'), 'default'] + const cryptoProvide = [path.resolve(__dirname, '../crypto.js'), 'default'] provides['crypto'] = cryptoProvide provides['window.crypto'] = cryptoProvide provides['global.crypto'] = cryptoProvide @@ -73,7 +73,7 @@ module.exports = { name: 'common/runtime' } - webpackConfig.optimization.splitChunks = require('./split-chunks')() + webpackConfig.optimization.splitChunks = require('../split-chunks')() parseEntry() @@ -175,7 +175,7 @@ module.exports = { .add(/\.filter\.js$/) } - const compilerOptions = process.env.UNI_USING_COMPONENTS ? {} : require('./mp-compiler-options') + const compilerOptions = process.env.UNI_USING_COMPONENTS ? {} : require('../mp-compiler-options') modifyVueLoader(webpackConfig, {}, compilerOptions, api) @@ -190,7 +190,7 @@ module.exports = { process.env.NODE_ENV === 'production' && process.env.UNI_PLATFORM !== 'app-plus' ) { - const OptimizeCssnanoPlugin = require('../packages/@intervolga/optimize-cssnano-plugin/index.js') + const OptimizeCssnanoPlugin = require('../../packages/@intervolga/optimize-cssnano-plugin/index.js') webpackConfig.plugin('optimize-css') .init((Plugin, args) => new OptimizeCssnanoPlugin({ sourceMap: false, diff --git a/packages/webpack-uni-pages-loader/lib/platforms/app-plus/app-config-service.js b/packages/webpack-uni-pages-loader/lib/platforms/app-plus/app-config-service.js index 2a9bb9ab4f18bce5b790f22f7f9e9bad538d8d6c..d74092e4a1a932a7ec5abb465bc0456cfc81f019 100644 --- a/packages/webpack-uni-pages-loader/lib/platforms/app-plus/app-config-service.js +++ b/packages/webpack-uni-pages-loader/lib/platforms/app-plus/app-config-service.js @@ -46,4 +46,3 @@ service.register("uni-app-config",{create(a,b,c){if(!__uniConfig.viewport){var d ` } } -