Работа с набором сценариев, которые будут запускаться в контексте браузера, где определенные модули (например, подчеркивание) будут доступны в виде глобальных модулей. Тем не менее, я в зависимости от модулей в node_modules
что require
/import
подчеркнуть напрямую. Можно ли настроить WebPack для зависимости от экземпляра глобального подчеркивания при компиляции этих файлов вместо дублирования этой библиотеки в моих скомпилированных сценариях?WebPack 2: замененный модуль require'd с глобальным
ответ
Что вы ищете в Externals:
конфигурация
externals
в WebPack обеспечивает способ не включая зависимость в пачке. Вместо этого созданный пакет полагается на эту зависимость, чтобы присутствовать в потребительской среде. Обычно это относится к разработчикам библиотек, хотя разработчики приложений также могут хорошо использовать эту функцию.
Это работает даже для модулей в node_modules
как WebPack ходит все дерево зависимостей в , чтобы выяснить, что включать в результирующей пачке.
Там даже example это специально для вашего случая использования, это выглядит следующим образом:
externals : {
lodash : {
commonjs: "lodash",
amd: "lodash",
root: "_" // indicates global variable
}
}
Этот синтаксис используется для описания всех возможных способов, что внешняя библиотека может быть доступна. lodash здесь доступен как lodash в системах AMD и CommonJS, но доступен как _ в глобальной переменной форме.
Если вы хотите полагаться на библиотеку, которая уже доступна в среде при загрузке вашего пакета, вам необходимо использовать externals.
module.exports = {
externals: {
underscore: "_"
}
}
Ключ объекта (underscore
) является то, что вы используете, чтобы импортировать его, а значение (_
) является глобальной переменной она будет искать.
require("underscore"); // Will return the _ variable from the global environment!