#javascript #node.js #webpack
#javascript #node.js #webpack
Вопрос:
Webpack не может разрешить ядро Node.js модули
Я знаю, что это не единственный Node.js запрос модуля, связанный с Webpack, приведен здесь, но при применении решений, которые я прочитал в другом месте, еще один основной модуль, похоже, вызывает другую ошибку ReferenceError.
У меня есть index.js файл, который требует, чтобы криптомодуль регистрировал хэш в консоли:
index.js
const crypto = require('crypto')
const secret = 'abcdefg';
const hash = crypto.createHmac('sha256', secret)
.update('I love cupcakes')
.digest('hex');
console.log(hash);
При настройке моего webpack.congif.js файл, я получил обратно эту ошибку:
КРИТИЧЕСКОЕ ИЗМЕНЕНИЕ: webpack < 5 используется для включения полизаполнений для node.js основные модули по умолчанию. Это больше не так. Проверьте, нужен ли вам этот модуль, и настройте для него полизаполнение. Если вы хотите включить полизаполнение, вам необходимо:
- добавьте резервный вариант решения.резервный вариант: { «crypto»: require.resolve(«crypto-browserify») }’
- установите «crypto-browserify»
Следуя приведенным выше инструкциям, я получил ту же ошибку для модулей ‘buffer’ и ‘stream’, и чтобы получить конфигурационный файл для компиляции, я добавил резервные инструкции и установил соответствующие модули, чтобы покрыть эти недостающие зависимости:
webpack.config.js
const path = require('path');
module.exports = {
mode: 'development',
node: {
global: true,
},
resolve: {
fallback: {
"crypto": require.resolve("crypto-browserify"),
"buffer": require.resolve("buffer/"),
"stream": require.resolve("stream-browserify")
}
},
entry: './src/index.js',
output: {
filename: 'main.js',
path: path.resolve(__dirname, 'dist'),
},
};
Webpack.config теперь компилируется, но когда я запускаю index.html в браузере я получаю следующую ошибку в консоли браузера:
Неперехваченная ошибка ссылки: процесс не определен
Как указано в ошибке «Критическое изменение», Webpack 5 больше не выполняет полизаполнение для модулей ядра узла, но означает ли это, что полизаполнение требуется для каждого отдельного модуля узла, прежде чем вы сможете запустить сценарий узла?
Ответ №1:
Попробуйте использовать process/browser
polyfill. Поместите это в свой webpack.config.js
:
resolve: {
alias: {
process: "process/browser"
},
...
}
Комментарии:
1. Боюсь, я все еще получаю то же сообщение об ошибке. Должна ли ссылка на «процесс» заключаться в кавычки?
2. @Tee-Poe, это та же ошибка? Ключевые кавычки не должны быть необходимы, если это не json, но они никогда не повредят.