in packages/lowcode-plugin-inject/src/utils.tsx [170:230]
function envFilter(injects) {
if (!injects) {
return [];
}
const urlParams = queryString.parse(window.location.search);
// 从 window 或者 url 中获取当前是设计器还是预览环境;没有配置则读取 window 是否有 VisualEngine
const env = window.injectEnv || urlParams[injectEnvFlag] || (window.VisualEngine || window.LowcodeEditor || window.AliLowCodeEngine ? 'design' : 'preview') || 'design';
let device = urlParams[injectDeviceFlag] || (window.g_config && window.g_config.device) || (window.pageConfig && window.pageConfig.device) || 'web';
if (device === 'both') { // 乐高有双端的能力,开启后 device 是 both
device = /Mobile/.test(window.navigator.userAgent) ? 'mobile' : 'web';
}
let prototypeKey = urlParams[prototypeKeyFlag] || (window.pageConfig
&& window.pageConfig.designerConfigs
&& window.pageConfig.designerConfigs.prototypeKey);
prototypeKey = prototypeKey === 'default' ? '' : prototypeKey;
return injects.filter((item) => {
if (env === 'design') {
// 设计器不需要注入组件的 view 和 vu
if (['utils'].indexOf(item.type) >= 0) {
return false;
}
// 注入指定的 prototype
if (item.type === 'prototype') {
if (item.subType && item.subType !== prototypeKey) {
return false;
}
if (!item.subType && prototypeKey) {
// 看有没有对应的 prototype.js 如果没有则用默认的
const proto = injects.find(item2 => item2.packageName === item.packageName && item2.type === 'prototype' && item2.subType === prototypeKey);
if (proto) {
return false;
}
}
}
}
if (env === 'preview') {
// 预览不需要注入 prototype、vp、setter、pane
if (['prototype', 'plugin', 'setter', 'pane'].indexOf(item.type) >= 0) {
return false;
}
// PC 端应用不需要加载 view.mobile
if (device === 'web' && item.type === 'view' && item.subType === 'mobile') {
return false;
}
// 移动端应用如果有 view.mobile 则不需要加载 view,否则还是加载 view
if (device === 'mobile' && item.type === 'view' && item.subType !== 'mobile') {
// 看当前组件有没有 view.mobile
const viewMobile = injects.find(item2 => item2.packageName === item.packageName && item2.type === 'view' && item2.subType === 'mobile');
if (viewMobile) {
return false;
}
}
}
return true;
});
}