Skip to content

Commit

Permalink
feat(cli): uni ext api
Browse files Browse the repository at this point in the history
  • Loading branch information
fxy060608 committed Oct 17, 2022
1 parent 0741850 commit 589151b
Show file tree
Hide file tree
Showing 7 changed files with 70 additions and 88 deletions.
3 changes: 1 addition & 2 deletions packages/uni-cli-shared/lib/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,5 @@ module.exports = {
getPlatformGlobal,
getPlatformStat,
getPlatformPush,
getPlatformUniCloud,
uniModulesLoader: normalizePath(require.resolve('./uni_modules-loader'))
getPlatformUniCloud
}
8 changes: 0 additions & 8 deletions packages/uni-cli-shared/lib/uni_modules-loader.js

This file was deleted.

101 changes: 42 additions & 59 deletions packages/uni-cli-shared/lib/uni_modules/uni_modules.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,16 @@ 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;
exports.parseInject = exports.parseInjects = exports.parseUniExtApis = void 0;
const path_1 = __importDefault(require("path"));
const fs_extra_1 = __importDefault(require("fs-extra"));
const merge_1 = require("merge");
function genUniModulesExports() {
function parseUniExtApis() {
const uniModulesDir = path_1.default.resolve(process.env.UNI_INPUT_DIR, 'uni_modules');
if (!fs_extra_1.default.existsSync(uniModulesDir)) {
return '';
return {};
}
const importCodes = [];
const assignCodes = [];
const injects = {};
fs_extra_1.default.readdirSync(uniModulesDir).forEach((uniModuleDir) => {
var _a, _b;
// 必须以 uni- 开头
Expand All @@ -24,46 +23,14 @@ function genUniModulesExports() {
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;
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['uni-ext-api'];
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);
Object.assign(injects, parseInjects(process.env.UNI_PLATFORM === 'h5' ? 'web' : process.env.UNI_PLATFORM, `@/uni_modules/${uniModuleDir}`, exports));
}
});
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];
return injects;
}
exports.parseDefines = parseDefines;
exports.parseUniExtApis = parseUniExtApis;
/**
* uni:'getBatteryInfo'
* import getBatteryInfo from '..'
Expand All @@ -85,32 +52,48 @@ exports.parseDefines = parseDefines;
* @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}`);
function parseInjects(platform, source, exports = {}) {
let rootDefines = {};
Object.keys(exports).forEach((name) => {
if (name.startsWith('uni')) {
rootDefines[name] = exports[name];
}
});
const platformDefines = exports[platform];
// 该平台不支持
if (platformDefines === false) {
return {};
}
if (platformDefines) {
rootDefines = (0, merge_1.recursive)(true, rootDefines, platformDefines);
}
const injects = {};
for (const key in rootDefines) {
Object.assign(injects, parseInject(source, 'uni', rootDefines[key]));
}
return injects;
}
exports.parseInjects = parseInjects;
function parseInject(source, globalObject, define) {
const injects = {};
if (define === false) {
}
else if (typeof define === 'string') {
// {'uni.getBatteryInfo' : '@dcloudio/uni-getbatteryinfo'}
injects[globalObject + '.' + define] = source;
}
else if (Array.isArray(define)) {
importCodes.push(`import { ${define.join(', ')} } from '${source}'`);
// {'uni.getBatteryInfo' : ['@dcloudio/uni-getbatteryinfo','getBatteryInfo]}
define.forEach((d) => {
assignCodes.push(`${globalObject}.${d} = ${d}`);
injects[globalObject + '.' + d] = [source, 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}`);
injects[globalObject + '.' + d] = [source, define[d]];
});
importCodes.push(`import { ${specifiers.join(', ')} } from '${source}'`);
}
return [importCodes, assignCodes];
return injects;
}
exports.parseInject = parseInject;
5 changes: 2 additions & 3 deletions packages/vue-cli-plugin-uni/lib/app-plus/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,7 @@ const {
getMainEntry,
getPlatformStat,
getPlatformPush,
getPlatformUniCloud,
uniModulesLoader
getPlatformUniCloud
} = require('@dcloudio/uni-cli-shared')

const vueLoader = require('@dcloudio/uni-cli-shared/lib/vue-loader')
Expand Down Expand Up @@ -66,7 +65,7 @@ const v3 = {
const pushCode = getPlatformPush()
const uniCloudCode = getPlatformUniCloud()

const beforeCode = `import 'uni-pages';import '${uniModulesLoader}!';`
const beforeCode = 'import \'uni-pages\';'
if (!webpackConfig.optimization) {
webpackConfig.optimization = {}
}
Expand Down
31 changes: 21 additions & 10 deletions packages/vue-cli-plugin-uni/lib/configure-webpack.js
Original file line number Diff line number Diff line change
Expand Up @@ -73,8 +73,8 @@ module.exports = function configureWebpack (platformOptions, manifestPlatformOpt
const normalized = RuleSet.normalizeRule(clone, {}, '')
return (
!rule.enforce &&
normalized.resource &&
normalized.resource(fakeFile)
normalized.resource &&
normalized.resource(fakeFile)
)
}
}
Expand Down Expand Up @@ -230,7 +230,10 @@ module.exports = function configureWebpack (platformOptions, manifestPlatformOpt
webpackConfig.resolve.modules = webpackConfig.resolve.modules.filter(module => module !== 'node_modules')
}

const plugins = []
const plugins = [
new webpack.ProvidePlugin(require('@dcloudio/uni-cli-shared/lib/uni_modules/uni_modules')
.parseUniExtApis())
]

const isAppView = process.env.UNI_PLATFORM === 'app-plus' &&
vueOptions.pluginOptions &&
Expand All @@ -239,7 +242,9 @@ module.exports = function configureWebpack (platformOptions, manifestPlatformOpt

if (!isAppView) { // app-plus view不需要copy
const patterns = getCopyWebpackPluginOptions(manifestPlatformOptions, vueOptions)
plugins.push(new CopyWebpackPlugin(CopyWebpackPluginVersion > 5 ? { patterns } : patterns))
plugins.push(new CopyWebpackPlugin(CopyWebpackPluginVersion > 5 ? {
patterns
} : patterns))
}
if (!process.env.UNI_SUBPACKGE || !process.env.UNI_MP_PLUGIN) {
try {
Expand All @@ -258,8 +263,10 @@ module.exports = function configureWebpack (platformOptions, manifestPlatformOpt
return ''
}
}]
plugins.push(new CopyWebpackPlugin(CopyWebpackPluginVersion > 5 ? { patterns } : patterns))
} catch (e) { }
plugins.push(new CopyWebpackPlugin(CopyWebpackPluginVersion > 5 ? {
patterns
} : patterns))
} catch (e) {}
}

if (process.UNI_SCRIPT_ENV && Object.keys(process.UNI_SCRIPT_ENV).length) {
Expand Down Expand Up @@ -309,7 +316,8 @@ module.exports = function configureWebpack (platformOptions, manifestPlatformOpt
})
}

if (process.env.NODE_ENV === 'development' || (process.env.NODE_ENV === 'production' && process.env.SOURCEMAP === 'true')) {
if (process.env.NODE_ENV === 'development' || (process.env.NODE_ENV === 'production' && process.env
.SOURCEMAP === 'true')) {
const sourceMap = require('@dcloudio/uni-cli-shared/lib/source-map')
let isAppService = false
if (
Expand All @@ -331,15 +339,18 @@ module.exports = function configureWebpack (platformOptions, manifestPlatformOpt
noSources: true,
append: false
}
if (isInHBuilderX && process.env.SOURCEMAP_PATH) { sourceMapOptions.filename = process.env.SOURCEMAP_PATH }
if (isInHBuilderX && process.env.SOURCEMAP_PATH) {
sourceMapOptions.filename = process.env.SOURCEMAP_PATH
}
if (useEvalSourceMap || useSourceMap) {
plugins.push(sourceMap.createSourceMapDevToolPlugin(!sourceMapOptions.filename, sourceMapOptions))
}
} else {
if (useEvalSourceMap) {
plugins.push(sourceMap.createEvalSourceMapDevToolPlugin())
} else if (useSourceMap) {
plugins.push(sourceMap.createSourceMapDevToolPlugin(process.env.UNI_PLATFORM === 'mp-weixin' || process.env.UNI_PLATFORM === 'mp-toutiao'))
plugins.push(sourceMap.createSourceMapDevToolPlugin(process.env.UNI_PLATFORM === 'mp-weixin' || process
.env.UNI_PLATFORM === 'mp-toutiao'))
}
}
}
Expand Down Expand Up @@ -407,4 +418,4 @@ module.exports = function configureWebpack (platformOptions, manifestPlatformOpt
watchOptions: require('./util').getWatchOptions()
}, platformWebpackConfig)
}
}
}
5 changes: 2 additions & 3 deletions packages/vue-cli-plugin-uni/lib/h5/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,7 @@ const {
getH5Options,
getPlatformStat,
getPlatformPush,
getPlatformUniCloud,
uniModulesLoader
getPlatformUniCloud
} = require('@dcloudio/uni-cli-shared')

const {
Expand Down Expand Up @@ -104,7 +103,7 @@ module.exports = {
} catch (e) {}

const beforeCode = (useBuiltIns === 'entry' ? 'import \'@babel/polyfill\';' : '') +
`import 'uni-pages';import 'uni-${process.env.UNI_PLATFORM}';import '${uniModulesLoader}!';`
`import 'uni-pages';import 'uni-${process.env.UNI_PLATFORM}';`

return {
resolve: {
Expand Down
5 changes: 2 additions & 3 deletions packages/vue-cli-plugin-uni/lib/mp/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,7 @@ const {
getPlatformCssnano,
getPlatformStat,
getPlatformPush,
getPlatformUniCloud,
uniModulesLoader
getPlatformUniCloud
} = require('@dcloudio/uni-cli-shared')

const WebpackUniAppPlugin = require('../../packages/webpack-uni-app-loader/plugin/index')
Expand Down Expand Up @@ -182,7 +181,7 @@ module.exports = {
const pushCode = getPlatformPush()
const uniCloudCode = getPlatformUniCloud()

let beforeCode = `import 'uni-pages';import '${uniModulesLoader}!';`
let beforeCode = 'import \'uni-pages\';'

const plugins = [
new WebpackUniAppPlugin(),
Expand Down

0 comments on commit 589151b

Please sign in to comment.