2017-01-22 3 views
4

Я делаю плагин с надписью с webpack. Все работает хорошо, но у меня есть проблема с тем, чтобы сделать его видимым снаружи. Например, у меня есть файлы:Сделать глобальную функцию в webpack

/* ./src/a.ts */ 
class A { 
    constructor(args) {...} 
} 
export default A; 

/* ./src/app.ts */ 
import A from "./a.ts"; 
function init(args) { 
    new A(args); 
} 
export { init }; 

/* ./index.html */ 
<html> 
<head>...</head> 
<body> 
... 

<!-- webpack bundle ts files into ./dist/app.js --> 
<script src="./dist/app.js"></script> 
<script>init({...});</script> 

</body> 
</html> 

С этим я получил Uncaught ReferenceError: init is not defined. В комплекте файла я могу видеть, что эта функция не является глобальной, а внутри другой функции, как это:

/* 1 */ 
/***/ function(module, exports) { ... } 

Как сделать эту функцию общественность?

ответ

7

Экспорт из модуля не делает сущность глобальной. Вы можете либо непосредственно добавить его в качестве члена в окно:

window.init = init; 

или, еще лучше, переместить инициализации вызова к модулю Машинопись - что в данном случае должна быть точка входа WebPack.

+0

Это действительно единственное решение, которое делает функции модуля видимыми вне себя, если я собираюсь связать их с webpack? Я работаю над большим проектом и не могу пойти и изменить это, добавив 'windows.functionname = functionname;' для каждого из них. Есть ли лучшее решение для такого случая, как мой? – FedericoCapaldo

+0

Разве это не возможно сделать для вас все, что потребляется через веб-пакет? В основном связывает все, что потребляет эту переменную. – lorefnon

+0

Я собираю вместе файл, который определяет эту переменную и файлы, которые ее используют, все из них. Но определение функции по-прежнему остается невидимым для реализации функции. Потому что, опять же, каждый файл (а не последний пакет) заключен в его оболочку функций (например, пакет webpack выглядит как функция (N, a) {код javascript-файла здесь} function (N) {код другого javascript здесь} '). я что-то упускаю? – FedericoCapaldo

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