32
votes

WebPack 5 - Référence non apparente: le processus n'est pas défini

webpack newbie ici, WebPack CLI m'a dit que j'avais besoin de fournir un alias pour Crypto car WebPack n'inclut plus les bibliothèques de nœuds par défaut. Maintenant, je reçois cette erreur, d'autres réponses n'ont pas beaucoup aidé. Crypto-Browserify essaie d'accéder à process.browser . Quelqu'un peut-il faire plus de lumière? CLI m'a dit d'installer Stream-Browserify aussi j'ai fait.

React V17, Babel 7.12.9, WebPack 5.6.0

webpack.common .js

const webpack = require('webpack');
const { merge } = require('webpack-merge');
const common = require('./webpack.common');

module.exports = merge(common, {
  mode: 'development',

  // Control how source maps are generated
  devtool: 'inline-source-map',

  // Spin up a server for quick development
  devServer: {
    historyApiFallback: true,
    contentBase: paths.build,
    open: true,
    compress: true,
    hot: true,
    port: 8080,
  },

  plugins: [
    // Only update what has changed on hot reload
    new webpack.HotModuleReplacementPlugin(),
  ],
});

webpack.dev.js

const paths = require('./paths');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
const CopyWebpackPlugin = require('copy-webpack-plugin');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const dotenv = require('dotenv-webpack');

module.exports = {
  entry: [paths.src + '/index.js'],
  output: {
    path: paths.build,
    filename: '[name].bundle.js',
    publicPath: '/',
  },
  plugins: [
    new dotenv(),
    new CleanWebpackPlugin(),
    new CopyWebpackPlugin({
      patterns: [
        {
          from: paths.public,
          to: 'assets',
          globOptions: {
            ignore: ['*.DS_Store'],
          },
        },
      ],
    }),
    new HtmlWebpackPlugin({
      title: 'Webpack Boilerplate',
      // favicon: paths.src + '/images/favicon.png',
      template: paths.src + '/template.html',
      filename: 'index.html',
    }),
  ],
  resolve: {
    fallback: {
      crypto: require.resolve('crypto-browserify'),
      stream: require.resolve('stream-browserify'),
    },
  },
  module: {
    rules: [
      // javascript
      {
        test: /\.js$/,
        exclude: /node_modules/,
        use: ['babel-loader'],
      },
      // images
      {
        test: /\.(?:ico|gif|png|jpg|jpeg)$/i,
        type: 'asset/resource',
      },
      // Fonts and SVGs
      {
        test: /\.(woff(2)?|eot|ttf|otf|svg|)$/,
        type: 'asset/inline',
      },
      // CSS, PostCSS, and Sass
      {
        test: /\.(scss|css)$/,
        use: [
          'style-loader',
          {
            loader: 'css-loader',
            options: {
              esModule: true,
              sourceMap: true,
              importLoaders: 1,
              modules: {
                auto: true,
                namedExport: true,
              },
            },
          },
          { loader: 'postcss-loader', options: { sourceMap: true } },
          { loader: 'sass-loader', options: { sourceMap: true } },
        ],
      },
    ],
  },
};


0 commentaires

4 Réponses :


85
votes

Dans WebPack 5, les polyfills Node.js automatiques sont supprimés. Dans les documents de migration, il est mentionné que

  • Essayez d'utiliser des modules compatibles au frontend dans la mesure du possible.
  • Il est possible d'ajouter manuellement un polyfill pour un module de noyau Node.js. Un message d'erreur donnera un indice sur la façon d'y parvenir.
  • Package Auteurs: Utilisez le champ du navigateur dans package.json pour faire un Package compatible frontal. Fournir une alternative Implémentations / dépendances pour le navigateur.

Voir ce problème .

Maintenant Vous pouvez référer ce PRO et vérifier les fimesries qui ont été supprimées et les installer . Ajoutez ensuite alias pour la lib dans votre configuration webpack.

Pour ex.

module.exports = {
  ...
  plugins: [
      new webpack.ProvidePlugin({
             process: 'process/browser',
      }),
  ],
}

Mise à jour: Cela peut également être fait à l'aide de providePlugin

pack > Xxx


11 commentaires

Installé le processus et essayé et pas encore de chance. Également essayé Fallback: {..., Process: require.resolve ('process') ...} et alias: {process: 'process'}


Merci. webpack.provideplugin fonctionne


J'ai NPM Install Process avec le ProvidePlugin mais je remets le module non trouvé: Erreur: Impossible de résoudre 'Process / Browser'


@Exegesis Assurez-vous de redémarrer le serveur lors de l'installation des dépendances. J'ai également fait le processus Add -D Yarn . Pour vous npm I - Save-Dev Process devrait fonctionner. Bon vieux rm -rf node_modules package-lock.json && npm i devrait également être toujours essayé


Merci! Le ProvidePlugin fonctionne bien.


Il a résolu le processus n'est pas une erreur définie, mais maintenant toute l'application explose et Console dit: `` Le navigateur n'est pas défini ''


Je me demande pourquoi se calmer ne fonctionne pas mais provideplugin


J'ai dû utiliser process / browser.js au lieu de process / navigateur .


Cela peut aider quelqu'un stackoverflow.com/a/68557784/1446006


Merci.It Works. Note après avoir modifié Package.json Exécuter NPM Install.


Si vous obtenez Impossible de trouver le module 'Process / Browser' , vous souhaiterez peut-être installer Node-Libs-Browser



0
votes

J'ai ce problème pour htmlwebpackplugin, j'ai ajouté le paramètre 'templateParameters' sur htmlwebpackplugin et il a été corrigé pour moi:

new HtmlWebpackPlugin({
      baseUrl: '/',
      template: 'app/index.html',
      templateParameters(compilation, assets, options) {
        return {
          compilation,
          webpack: compilation.getStats().toJson(),
          webpackConfig: compilation.options,
          htmlWebpackPlugin: {
            files: assets,
            options,
          },
          process,
        }
      },
      chunksSortMode: 'auto',
      minify: {
        collapseWhitespace: false,
      },
      cache: true,
    }),


0 commentaires

0
votes

J'espère que le correction que j'ai proposée sera acceptée et libérée bientôt


0 commentaires

6
votes

npm i Process était tout ce dont j'avais besoin.


2 commentaires

Cela a peut-être fonctionné pour vous, mais avez-vous des raisons de croire que l'installation de ce package suffit pour résoudre le problème de l'OP?


OP a déclaré que crypto-browserify essaie d'accéder à process.browser , de sorte qu'il n'a peut-être pas installé le package process . A part ça, rien. Nous devons également tenir compte du fait que les personnes ayant un problème similaire seront signalées vers cette question afin que cette réponse puisse également les aider.