You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

199 lines
7.5 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const path_1 = __importDefault(require("path"));
const fast_glob_1 = require("fast-glob");
const shared_1 = require("@vue/shared");
const uni_shared_1 = require("@dcloudio/uni-shared");
const uni_cli_shared_1 = require("@dcloudio/uni-cli-shared");
const validateFunction_1 = require("./validateFunction");
const uniCloudSpaces = [];
const initUniCloudEnvOnce = (0, uni_shared_1.once)(initUniCloudEnv);
initUniCloudEnvOnce();
/**
* @type {import('vite').Plugin}
*/
function uniCloudPlugin() {
return {
name: 'uni:cloud',
config(config) {
const silent = config.build && config.build.ssr ? true : false;
if (silent) {
return;
}
const len = uniCloudSpaces.length;
if (!len) {
return;
}
if ((0, uni_cli_shared_1.isInHybridNVue)(config)) {
return;
}
if (len === 1) {
console.log(`本项目的uniCloud使用的默认服务空间spaceId为${uniCloudSpaces[0].id}`);
}
if (process.env.UNI_PLATFORM === 'h5' &&
!process.env.UNI_SUB_PLATFORM &&
process.env.NODE_ENV === 'production') {
console.warn('发布到web端需要在uniCloud后台操作绑定安全域名否则会因为跨域问题而无法访问。教程参考https://uniapp.dcloud.net.cn/uniCloud/publish.html#useinh5');
}
return {};
},
configureServer(server) {
if (server.httpServer) {
server.httpServer.on('listening', () => {
process.nextTick(() => {
initUniCloudWarningOnce();
});
});
}
else {
initUniCloudWarningOnce();
}
},
closeBundle() {
if (process.env.UNI_PLATFORM === 'h5' && !process.env.UNI_SSR_CLIENT) {
console.log();
console.log('欢迎将web站点部署到uniCloud前端网页托管平台高速、免费、安全、省心详见https://uniapp.dcloud.io/uniCloud/hosting');
}
},
};
}
const initUniCloudWarningOnce = (0, uni_shared_1.once)(() => {
uniCloudSpaces.length &&
console.warn('当前项目使用了uniCloud为避免云函数调用跨域问题建议在HBuilderX内置浏览器里调试。如使用外部浏览器需处理跨域请将访问页面对应的IP或域名配置在要访问的云函数所在的服务空间的跨域配置内详见https://uniapp.dcloud.net.cn/uniCloud/publish.html#useinh5');
});
function checkProjectUniCloudDir() {
return !!(0, fast_glob_1.sync)(['uniCloud-aliyun', 'uniCloud-tcb', 'uniCloud-alipay', 'uniCloud-dcloud'], {
cwd: (0, uni_cli_shared_1.isInHBuilderX)()
? process.env.UNI_INPUT_DIR
: process.env.UNI_CLI_CONTEXT,
onlyDirectories: true,
onlyFiles: false,
ignore: ['node_modules'],
}).length;
}
function resolveUniCloudModules() {
return (0, fast_glob_1.sync)('**/uni_modules/*/uniCloud', {
cwd: process.env.UNI_INPUT_DIR,
onlyDirectories: true,
onlyFiles: false,
ignore: ['node_modules'],
}).map((dir) => path_1.default.dirname(dir));
}
function checkUniModules() {
if (!checkProjectUniCloudDir()) {
const uniCloudModules = resolveUniCloudModules();
if (uniCloudModules.length) {
console.warn(`${uniCloudModules.join(', ')} 使用了uniCloud而项目未启用uniCloud。需在项目点右键创建uniCloud环境`);
}
}
}
function initUniCloudEnv() {
checkUniModules();
if (process.env.UNI_CLOUD_PROVIDER) {
const spaces = JSON.parse(process.env.UNI_CLOUD_PROVIDER);
if (!(0, shared_1.isArray)(spaces)) {
return;
}
if (spaces.length) {
uniCloudSpaces.push(...spaces);
return;
}
}
process.env.UNI_CLOUD_PROVIDER = JSON.stringify([]);
if (!process.env.UNI_CLOUD_SPACES) {
return;
}
try {
const spaces = JSON.parse(process.env.UNI_CLOUD_SPACES);
if (!(0, shared_1.isArray)(spaces)) {
return;
}
spaces.forEach((s) => uniCloudSpaces.push(s));
process.env.UNI_CLOUD_PROVIDER = JSON.stringify(uniCloudSpaces.map((space) => {
if (space.provider === 'tcb') {
space.provider = 'tencent';
}
if (!space.provider && space.clientSecret) {
space.provider = 'aliyun';
}
switch (space.provider) {
case 'aliyun':
case 'dcloud':
return {
provider: space.provider || 'aliyun',
spaceName: space.name,
spaceId: space.id,
clientSecret: space.clientSecret,
endpoint: space.apiEndpoint,
};
case 'alipay': {
return {
provider: space.provider,
spaceName: space.name,
spaceId: space.id,
spaceAppId: space.spaceAppId,
accessKey: space.accessKey,
secretKey: space.secretKey,
};
}
case 'tencent':
default: {
return {
provider: space.provider,
spaceName: space.name,
spaceId: space.id,
};
}
}
}));
}
catch (e) { }
}
exports.default = () => [
(0, uni_cli_shared_1.defineUniMainJsPlugin)((opts) => {
return {
name: 'uni:cloud-main',
enforce: 'pre',
config(config, env) {
if ((0, uni_cli_shared_1.isSsr)(env.command, config)) {
return;
}
const inputDir = process.env.UNI_INPUT_DIR;
const platform = process.env.UNI_PLATFORM;
const isSecureNetworkEnabled = (0, uni_cli_shared_1.isEnableSecureNetwork)(inputDir, platform);
return {
define: {
'process.env.UNI_SECURE_NETWORK_ENABLE': isSecureNetworkEnabled,
'process.env.UNI_SECURE_NETWORK_CONFIG': process.env.UNI_SECURE_NETWORK_CONFIG || JSON.stringify([]),
},
};
},
transform(code, id) {
if (!opts.filter(id)) {
return;
}
if (uniCloudSpaces.length) {
return {
code: code + `;\nimport '@dcloudio/uni-cloud';`,
map: null,
};
}
},
};
}),
uniCloudPlugin(),
// x 里边统一处理
...(process.env.UNI_APP_X === 'true'
? []
: [
(0, uni_cli_shared_1.uniViteInjectPlugin)('uni:cloud-inject', {
exclude: [...uni_cli_shared_1.COMMON_EXCLUDE],
uniCloud: ['@dcloudio/uni-cloud', 'default'],
}),
]),
(0, validateFunction_1.uniValidateFunctionPlugin)(),
];