Webpack не удается разрешить Node.js модули

#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, но они никогда не повредят.