Ответ
В Webpack зависимости можно подключать несколькими способами:
- Через
import/requireв коде:
import lodash from 'lodash';
const moment = require('moment');
- В конфигурации Webpack через
externals(если библиотека доступна глобально):
externals: {
jquery: 'jQuery'
}
- Через плагины типа
ProvidePluginдля автоматического импорта:
plugins: [
new webpack.ProvidePlugin({
$: 'jquery',
jQuery: 'jquery'
})
]
Основные правила:
- Убедитесь, что зависимости установлены через npm/yarn (
package.json) - Для CSS/SCSS используйте соответствующие лоадеры
- Для обработки node_modules можно использовать
include/excludeв лоадерах
Пример конфига с обработкой зависимостей:
module: {
rules: [
{
test: /.js$/,
exclude: /node_modules/,
use: 'babel-loader'
}
]
} Ответ 18+ 🔞
Да ты посмотри, какие тут, блядь, варианты развести свою библиотечную лавочку в Webpack'е! Прям как на базаре — кто во что горазд, а в итоге всё в один bundle запихивается, ёпта.
Ну, первое и самое простое — это просто взять и импортнуть, как нормальные люди. Сидишь ты такой в своём index.js, и пишешь:
import lodash from 'lodash';
const moment = require('moment');
Всё, приехали. Webpack видит эту хуйню и начинает рыскать по node_modules, как собака сука, пока не найдёт эти папки. Главное, чтобы в package.json они были прописаны, а то будет искать-искать, да так с пустыми руками и останется, манда с ушами.
А вот если какая-нибудь библиотека, типа jQuery, уже торчит глобально, прямо в window засунута каким-нибудь старым скриптом, то можно сделать хитро. Объявить её external — мол, чувак, не парься, ищи её не в модулях, а снаружи, в глобальной области.
externals: {
jquery: 'jQuery'
}
То есть, когда он встретит import $ from 'jquery', он не станет её в бандл пихать, а просто подставит глобальную переменную window.jQuery. Хуй с горы, просто и со вкусом.
Но есть же ещё и третий способ, для ленивых, как я. Чтоб вообще не писать импорты. Заходишь в plugins и настраиваешь ProvidePlugin:
plugins: [
new webpack.ProvidePlugin({
$: 'jquery',
jQuery: 'jquery'
})
]
И теперь, в любом месте твоего кода, стоит тебе написать $ — он сам, блядь, подтянет jquery и впихнет её туда. Волшебство, ёперный театр! Удобно, но потом хрен разберёшь, откуда что берётся.
Теперь, блядь, главные правила, чтоб не обосраться:
- Убедись, что зависимости в
package.jsonесть. Иначе npm install не поставит, и будет тебе овердохуища ошибок в стиле «MODULE_NOT_FOUND». Сам от себя охуеешь. - CSS/SCSS файлы — им нужны свои, особенные лоадеры (
css-loader,sass-loader). Без них Webpack на них посмотрит как баран на новые ворота и плюнет в тебя ошибкой. node_modulesобычно исключают из обработки основными лоадерами (типаbabel-loader). Зачем их транспилировать, если они уже, в теории, готовые? Только время зря потратишь.
Вот смотри, пример конфига, где он JS-шки из node_modules не трогает:
module: {
rules: [
{
test: /.js$/,
exclude: /node_modules/, // Вот эта хитрая жопа говорит: "не лезь в папку с зависимостями, идиот"
use: 'babel-loader'
}
]
}
Всё, теперь твой babel-loader будет облизывать только твой исходный код, а библиотеки оставит в покое. Быстро и без лишнего пиздеца.
Короче, вариантов — как говна за баней. Выбирай любой, главное — понимай, что делаешь, а не тыкай наугад, пока не заработает. Иначе потом разгребать этот бардак будет тот ещё пиздец.