Прежде всего, вам нужно привязать результат require('consent-string');
к чему-либо.Я не знаю библиотеку, но, глядя на их страницу npm, вы сможете сделать следующее:
const { ConsentString : CSLib} = require('consent-string');
Однако, даже если вы сделаете это, она не будет работать из-за некоторых деталей того, как на самом деле работает webpack.В основном каждый модуль, а точнее файл, выполняется внутри своей области видимости, и они не проникают в глобальный контекст.Как оно работает?Позвольте мне продемонстрировать.
Основы работы с веб-пакетами
Давайте начнем со следующего файла примера, который импортирует jquery
, печатает "test" и экспортирует что-то.
const $ = require('jquery');
console.log("test");
export function test() {
console.log("test");
}
Запустите webpack для этого файла и откройте bundle.js
.Вы обнаружите, что он начинается с определения функции следующим образом: function(modules)
.Это функция начальной загрузки webpacks.Если вы действительно посчитаете все скобки, вы обнаружите, что он определен, а затем немедленно вызван с массивом функций со следующей сигнатурой function(module, exports, __webpack_require__)
.Каждая функция в этом массиве представляет модуль или, вернее, файл, который веб-пакет включил в пакет.Вы найдете модуль 0, который генерируется веб-пакетом.Это выглядит так:
/* 0 */
/***/function(module, exports, __webpack_require__) {
module.exports = __webpack_require__(1);
/***/ }
Все, что он делает, это звонит __webpack_require__(1)
.Так, что это делает?__webpack_require__
передается в качестве аргумента функции модуля, в которой мы находимся, но если вы заглянете внутрь функции начальной загрузки, вы обнаружите, что она там определена.Это работает следующим образом
Если модуль с заданным идентификатором (идентификатор является индексом в массиве модулей, который мы обсуждали ранее) был «установлен», просто верните, что экспортированные свойства модулей,Модуль был установлен, если у него есть запись в массиве installedModules
.
В противном случае определите новый объект модуля (хранит идентификатор модуля, если он был загружен, и онэкспорта), затем вызовите функцию модуля с некоторыми аргументами, которые я буду обсуждать позже.
Отметьте модуль как загруженный, добавьте объект модуля в installedModules
и верните его свойство exports
(мы увидим, как exports
заполняется через минуту).
Теперь давайте посмотрим, как webpack изменил код, который мы дали.Он может быть найден в модуле 1 (который вызывается из модуля 0 запомнить) и выглядит следующим образом (там тоже могут быть какие-то бухгалтерии, но я его проигнорирую, я думаю, это из соображений совместимости):
var $ = __webpack_require__(2);
console.log("test");
function test() {
console.log("test");
}
exports.test = test;
Первая строка - var $ = __webpack_require__(2);
Это мы уже обсуждали.Он просто импортирует jquery
, что является модулем 2 (именно поэтому модуль 2 занимает большую часть файла, поскольку он включает в себя все jquery
).
Тогда у нас есть console.log("test");
.Ничего не изменилось из кода, который мы передали.
Но функция, которую мы экспортировали, была разделена на два оператора.Сначала определяется функция, а затем она добавляется к exports
как свойство.Объект exports
передается __webpack_require__
и представляет свойства, которые экспортирует модуль.Он хранится в installedModules
в объекте модуля.Помните, что любой последующий вызов __webpack_require__
просто вернет свойство exports
этого объекта модуля.
tldr : Webpack преобразует все эти причудливые операции на основе модулей в вызовы __webpack_require__
для импорта и присвоения exports
для экспортных выписок.Это создает иллюзию того, что каждый модуль существует в своем собственном маленьком мире.
Что это значит для вас
Поскольку каждый модуль запускается внутри своей собственной области, вам нужно сгруппировать код, который использует require('consent-string');
с требованием утверждения.В заключение ваш index.js
должен выглядеть так:
const { ConsentString : CSLib} = require('consent-string');
var consentData = new CSLib();
console.log('euconsent : '+consentData);