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

feat(cli): uni ext api

上级 07418505
......@@ -112,6 +112,5 @@ module.exports = {
getPlatformGlobal,
getPlatformStat,
getPlatformPush,
getPlatformUniCloud,
uniModulesLoader: normalizePath(require.resolve('./uni_modules-loader'))
getPlatformUniCloud
}
const {
genUniModulesExports
} = require('./uni_modules/uni_modules')
module.exports = function () {
this.cacheable && this.cacheable()
return genUniModulesExports()
}
......@@ -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- 开头
......@@ -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 '..'
......@@ -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,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')
......@@ -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 = {}
}
......
......@@ -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)
)
}
}
......@@ -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 &&
......@@ -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 {
......@@ -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) {
......@@ -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 (
......@@ -331,7 +339,9 @@ 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))
}
......@@ -339,7 +349,8 @@ module.exports = function configureWebpack (platformOptions, manifestPlatformOpt
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'))
}
}
}
......@@ -407,4 +418,4 @@ module.exports = function configureWebpack (platformOptions, manifestPlatformOpt
watchOptions: require('./util').getWatchOptions()
}, platformWebpackConfig)
}
}
}
......@@ -7,8 +7,7 @@ const {
getH5Options,
getPlatformStat,
getPlatformPush,
getPlatformUniCloud,
uniModulesLoader
getPlatformUniCloud
} = require('@dcloudio/uni-cli-shared')
const {
......@@ -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: {
......
......@@ -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')
......@@ -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(),
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册