Это невозможно, поскольку вы написали его, так как экспорт должен быть определен на верхнем уровне (от §A.5 of the spec). Это связано с тем, как модули обрабатываются при возникновении ленивой загрузки или циклических зависимостей, и код не может быть выполнен во время или до загрузки.
Вы можете избежать этого беспорядка полностью экспортировать ветку, а не экспорт из в отрасли:
export function getTheFunction() {
if (Meteor.isServer) {
return serverOnlyFunction;
} else {
return functionForEverybody;
}
}
Кроме того, функция обертка будет работать точно так же:
export function wrapTheFunction(...args) {
if (Meteor.isServer) {
return serverOnlyFunction.apply(this, args);
} else {
return functionForEverybody.apply(this, args);
}
}
Если вы используя exports
непосредственно без ключевого слова ES6, вы можете назначить из внутри филиала:
if (Meteor.isServer) {
module.exports = serverOnlyFunction;
} else {
module.exports = functionForEverybody;
}
Но, если вы не застряли на ES5, это плохая практика. Экспорт функции, способной решать, является гораздо более надежным решением.
Во-вторых:
import { Meteor } from 'meteor/meteor'; // <- is an import
if (Meteor.isServer) {
const thing = require('./blah').default; // <- is *not* an import
}
require
не импорт. Это две разные вещи с совершенно другим поведением. Кроме того, require
- это вызов времени выполнения, выполняемый в API, предоставляемый средой выполнения (узел или requirejs) и возвращаемый синхронно.
Правильный ES6 эквивалент будет:
if (Meteor.isServer) {
System.import('./blah').then((thing) => {
// do something with thing
});
}
Как ни странно, 'system' существует в Метеор, но не имеет' import' функцию – corvid
Насколько мне известно, ни одна среда не обеспечивает полностью функциональный 'system' объект сегодня , Вам необходимо использовать библиотеку или пакет, который ее реализует. – ssube