Собираю все JS файлы в webpack.
function DetailClass() {
this.add = function() {
//something...
}
}
var Detail = new DetailClass();
После сборки в 1 файл пытаюсь запустить функцию через HTML:
<div onclick="Detail.add();">Добавить</div>
Но ничего не срабатывает. Пишет Detail is not defined.
Внимание, ответ актуален для webpack 1 а не для вышедшего в релиз пару недель назад webpack 2. Там вероятно остаются те же принципы, но несколько отличается API.
Через свой html вы обращаетесь к Detail
как к глобальной переменной.
Она у вас глобальной и была видимо потому что var Detail = new DetailClass();
выполнялось на уровне всего документа.
Вебпак же ожидает, что модули которые вы ему подсовываете - реальные модули, без побочных эффектов. Поэтому совершенно спокойно оборачивает все в замыкание и переменная Detail
больше не глобальная и больше не видна из глобального контекста в котором работает инлайн обработчик.
Что делать?
1. Простой грязный способ.
Была переменная глобальной, глобальной ее и оставим.
window.Detail = new DetailClass();
Ну и разумеется этот код нужно выполнить раньше выполнить, чем позвать Detail из html.
В вашем коде вероятнее всего пойдет и так, потому что сомневаюсь что структура приложения у вас хорошо организована.
2. Правильный способ.
Внимательно прочитать раздел документации, который касается работы с легаси кодом который не модулен, и выбрать способ подходящий именно вам (imports-loader/exports-loader/ProvidePlugin)
Но если у вас прямо такой кусок html разметки с инлайновым обработчиком, и он не создается никаким шаблонизатором/js кодом, то вам эти способы из коробки врядли подойдут, потому что они предназначены для случаев когда клиентская часть организована нормально =)
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Работаю над сайтом на bootstrap 4 + библиотека bootstrap-material-design, которая ориентирована на bootstrap3, но вполне себе работала и на 4Работала, кроме одного...
Пытаюсь подхватить элементы в jQuery все работает как надо :
Начал использовать PostCSS в мелком проекте, раньше использовал препроцессор LessЧасто сталкиваюсь с задачей, что если у элемента есть такой класс,...
Здравсвуйте,зделал фикированый header на jqueryЗаметел что при прокрутки на начале страницы он неприятно дергается