Исходный код, который вы показываете , вызывает анонимную функцию, которая в любом смысле должна определять глобальную переменную, тогда как второй фрагмент кода, который вы показываете, просто экспортирует функцию, что совсем другое.
В целях обсуждения, давайте предположим, что исходный код определяет глобальный, как это:
// my-third-party-module.js
(function() {
let myVar = 22;
window.MyThirdPartyModule = { log: function() { console.log(myVar); } };
}.call(this);
и вы используете в качестве так:
// app.js
MyThirdPartyModule.log();
Вы можете переписать это как
// my-third-party-module.js
let myVar = 22;
export default { log: function() { console.log(myVar); } };
// app.js
import MyThirdPartyModule from `my-third-party-module';
MyThirdPartyModule.log();
Обратите внимание, что мы переместили переменную myVar
, которая была локальной для t он анонимная функция на верхнем уровне модуля.
Однако, в зависимости от ваших предпочтений, а не экспортировать большой объект, который является своим родом предварительно модуль менталитета, вы можете экспортировать свои API, индивидуально:
// my-third-party-module.js
let myVar = 22;
export function log { console.log(myVar); }
// app.js
import {log} from `my-third-party-module';
log();
или, если вы предпочитаете
// app.js
import * as MyThirdPartyModule from `my-third-party-module';
MyThirdPartyModule.log();
Однако все эти подходы предполагают, что вы можете и хотите отредактировать источник сторонней библиотеки. Если это не так, то вы могли бы написать небольшой кусок клея кода, такие как
// my-third-party-module-interface.js
import 'my-third-party-module'; // This will run the module.
export default MyThirdPartyModule; // Export the global it defined.
// app.js
import MyThirdPartyModule from 'my-third-party-module-interface';
Если вы предпочли бы снова экспортировать отдельные интерфейсы API, вы можете расширить клей для реэкспорта каждого из них:
// my-third-party-module-interface.js
import 'my-third-party-module'; // This will run the module.
const {log, otherAPI, ...} = MyThirdPartyModule;
export {log, otherAPI, ...};
// app.js
import {log} from 'my-third-party-module-interface';
Это во многом зависит от '/*...*/'. В настоящее время, что IIFE, кажется, ничего не экспортирует, поэтому я не уверен, где вы получаете этот экспорт по умолчанию и функцию. – Bergi
Пожалуйста, отредактируйте свой вопрос, чтобы ответить на мой комментарий, и я могу ответить на ваш вопрос. – Bergi