提交 e42ead51 编写于 作者: fxy060608's avatar fxy060608

feat(uni_modules): support exports

上级 037722d6
......@@ -39,4 +39,5 @@ uni-polyfill.js
packages/uni-cli-shared/components/ad-fullscreen-video.vue
packages/uni-cli-shared/components/ad-interactive.vue
packages/uni-cli-shared/components/ad-interstitial.vue
packages/uni-cli-shared/components/ad-rewarded-video.vue
packages/uni-cli-shared/components/ad-rewarded-video.vue
packages/uni-cli-shared/lib/uni_modules/uni_modules.js
......@@ -112,5 +112,6 @@ module.exports = {
getPlatformGlobal,
getPlatformStat,
getPlatformPush,
getPlatformUniCloud
}
getPlatformUniCloud,
uniModulesLoader: normalizePath(require.resolve('./uni_modules-loader'))
}
const {
genUniModulesExports
} = require('./uni_modules/uni_modules')
module.exports = function () {
this.cacheable && this.cacheable()
return genUniModulesExports()
}
'use strict'
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { default: mod }
}
Object.defineProperty(exports, '__esModule', { value: true })
exports.parseDefines = exports.parseExports = exports.genUniModulesExports = void 0
const path_1 = __importDefault(require('path'))
const fs_extra_1 = __importDefault(require('fs-extra'))
const merge_1 = require('merge')
function genUniModulesExports () {
const uniModulesDir = path_1.default.resolve(process.env.UNI_INPUT_DIR, 'uni_modules')
if (!fs_extra_1.default.existsSync(uniModulesDir)) {
return ''
}
const importCodes = []
const assignCodes = []
fs_extra_1.default.readdirSync(uniModulesDir).forEach((uniModuleDir) => {
var _a, _b
const pkgPath = path_1.default.resolve(uniModulesDir, uniModuleDir, 'package.json')
if (!fs_extra_1.default.existsSync(pkgPath)) {
return
}
const exports = (_b = (_a = JSON.parse(fs_extra_1.default.readFileSync(pkgPath, 'utf8'))) === null || _a === void 0 ? void 0 : _a.uni_modules) === null || _b === void 0 ? void 0 : _b.exports
if (exports) {
const [exportsImportCodes, exportsAssignCodes] = parseExports(process.env.UNI_PLATFORM === 'h5' ? 'web' : process.env.UNI_PLATFORM, `@/uni_modules/${uniModuleDir}`, exports)
importCodes.push(...exportsImportCodes)
assignCodes.push(...exportsAssignCodes)
}
})
if (!importCodes.length) {
return ''
}
return `${importCodes.join('\n')}
${assignCodes.join('\n')}`
}
exports.genUniModulesExports = genUniModulesExports
function parseExports (platform, source, exports = {}) {
const rootDefines = {}
Object.keys(exports).forEach((name) => {
if (name.startsWith('uni')) {
rootDefines[name] = exports[name]
}
})
const platformDefines = exports[platform]
// 该平台不支持
if (platformDefines === false) {
return [[], []]
}
return parseDefines(source, (0, merge_1.recursive)(true, rootDefines, platformDefines))
}
exports.parseExports = parseExports
function parseDefines (source, defines = {}) {
const importCodes = []
const assignCodes = []
Object.keys(defines).forEach((name) => {
const [defineImportCodes, defineAssignCodes] = parseDefine(source, name, defines[name])
importCodes.push(...defineImportCodes)
assignCodes.push(...defineAssignCodes)
})
return [importCodes, assignCodes]
}
exports.parseDefines = parseDefines
/**
* uni:'getBatteryInfo'
* import getBatteryInfo from '..'
*
* uni:['getBatteryInfo']
* import { getBatteryInfo } from '..'
*
* uni:['openLocation','chooseLocation']
* import { openLocation, chooseLocation } from '..'
*
* uni:{
* onUserCaptureScreen: "onCaptureScreen"
* offUserCaptureScreen: "offCaptureScreen"
* }
*
* uni.getBatteryInfo = getBatteryInfo
* @param source
* @param globalObject
* @param define
* @returns
*/
function parseDefine (source, globalObject, define) {
const importCodes = []
const assignCodes = []
if (typeof define === 'string') {
importCodes.push(`import ${define} from '${source}'`)
assignCodes.push(`${globalObject}.${define} = ${define}`)
} else if (Array.isArray(define)) {
importCodes.push(`import { ${define.join(', ')} } from '${source}'`)
define.forEach((d) => {
assignCodes.push(`${globalObject}.${d} = ${d}`)
})
} else {
const keys = Object.keys(define)
const specifiers = []
keys.forEach((d) => {
if (d !== define[d]) {
specifiers.push(`${define[d]} as ${d}`)
} else {
specifiers.push(d)
}
assignCodes.push(`${globalObject}.${d} = ${d}`)
})
importCodes.push(`import { ${specifiers.join(', ')} } from '${source}'`)
}
return [importCodes, assignCodes]
}
......@@ -5,7 +5,8 @@ const {
getMainEntry,
getPlatformStat,
getPlatformPush,
getPlatformUniCloud
getPlatformUniCloud,
uniModulesLoader
} = require('@dcloudio/uni-cli-shared')
const vueLoader = require('@dcloudio/uni-cli-shared/lib/vue-loader')
......@@ -65,7 +66,7 @@ const v3 = {
const pushCode = getPlatformPush()
const uniCloudCode = getPlatformUniCloud()
const beforeCode = 'import \'uni-pages\';'
const beforeCode = `import 'uni-pages';import '${uniModulesLoader}!';`
if (!webpackConfig.optimization) {
webpackConfig.optimization = {}
}
......@@ -163,7 +164,7 @@ const v3 = {
compiler: vueLoader.compiler,
before: [
beforeCode + require('../util').getAutomatorCode() + statCode + pushCode + uniCloudCode +
getGlobalUsingComponentsCode()
getGlobalUsingComponentsCode()
]
}
}]
......@@ -278,4 +279,4 @@ if (process.env.UNI_USING_V3) {
module.exports = v3
} else {
module.exports = require('../mp')
}
}
......@@ -7,7 +7,8 @@ const {
getH5Options,
getPlatformStat,
getPlatformPush,
getPlatformUniCloud
getPlatformUniCloud,
uniModulesLoader
} = require('@dcloudio/uni-cli-shared')
const {
......@@ -103,7 +104,7 @@ module.exports = {
} catch (e) {}
const beforeCode = (useBuiltIns === 'entry' ? 'import \'@babel/polyfill\';' : '') +
`import 'uni-pages';import 'uni-${process.env.UNI_PLATFORM}';`
`import 'uni-pages';import 'uni-${process.env.UNI_PLATFORM}';import '${uniModulesLoader}!';`
return {
resolve: {
......@@ -194,4 +195,4 @@ module.exports = {
require('./cssnano-options')(webpackConfig)
}
}
}
}
......@@ -9,7 +9,8 @@ const {
getPlatformCssnano,
getPlatformStat,
getPlatformPush,
getPlatformUniCloud
getPlatformUniCloud,
uniModulesLoader
} = require('@dcloudio/uni-cli-shared')
const WebpackUniAppPlugin = require('../../packages/webpack-uni-app-loader/plugin/index')
......@@ -181,7 +182,7 @@ module.exports = {
const pushCode = getPlatformPush()
const uniCloudCode = getPlatformUniCloud()
let beforeCode = 'import \'uni-pages\';'
let beforeCode = `import 'uni-pages';import '${uniModulesLoader}!';`
const plugins = [
new WebpackUniAppPlugin(),
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册