2017-01-16 9 views
0

У меня есть модуль UMD ES2015Как заблокировать Babel, чтобы изменить это на неопределенное?

(function (global, factory) { 
    (typeof exports === 'undefined' ? 'undefined' : _typeof(exports)) === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : factory(global.XmlDSigJs = global.XmlDSigJs || {}); 
})(this, function (exports) { 
// My code here 
... 

После Вавилонского компиляции я получил (undefined, function (exports).

Есть ли какие-либо варианты байт, чтобы изменить это изменение?

+0

Как вы используете Babel? –

ответ

1

Если код уже написан как модуль UMD, и, таким образом, не использует import или export, то вы можете сделать

"presets": [ 
    ['es2015', {modules: false}] 
], 

Pass modules: false в сконфигурированного пресета сказать Бабеля не рассматривать Файловые «Модуль ES6», что и вызывает поведение, которое вы видите.

1

Вы сказали, что это «модуль ES2015». this в области верхнего уровня модуля ES2015 -undefined. Если ваш код ожидает, что он будет чем-то другим, этот код неверен.

Как правило, вы не ссылаетесь на глобальный объект или вообще не создаете глобальные модули; это одна из причин того, что у нас есть модули, чтобы избежать глобального загрязнения.

В тех редких случаях, где вам нужно, то, как вы это делаете, зависит от окружающей среды. В браузерах вы можете использовать window, который является глобальной переменной, которая ссылается на объект окна, который является глобальным объектом JavaScript в браузерах. В NodeJS вы можете использовать global, который является глобальной переменной, относящейся к глобальному объекту JavaScript.

Но опять же создание глобалов в модуле является анти-шаблоном. Модуль должен экспортировать то, что он предоставляет, а не сделать его глобальным.

+0

Это не моя собственная реализация UMD. Ниже приведен пример файла [config] (https://github.com/PeculiarVentures/xml-core/blob/master/rollup.config.js), который я использовал. Для меня это правильный результат ('this'). Но если вы запустите 'npm run build: web' для [xmldsigjs] (https://github.com/PeculiarVentures/xmldsigjs), вы получите' undefined' (не может работать в браузере). Я не использую тот же 'rollup.config' для' xmldsig', вызывают [issue] (https://github.com/rollup/rollup-plugin-babel/issues/125) – Microshine

 Смежные вопросы

  • Нет связанных вопросов^_^