304 votes

Le champ "browser" ne contient pas de configuration d'alias valide.

J'ai commencé à utiliser webpack2 (pour être précis, v2.3.2 ) et après avoir recréé ma configuration, je me heurte à un problème que je ne parviens pas à résoudre (désolé par avance pour le dump moche) :

ERROR in ./src/main.js
Module not found: Error: Can't resolve 'components/DoISuportIt' in '[absolute path to my repo]/src'
resolve 'components/DoISuportIt' in '[absolute path to my repo]/src'
  Parsed request is a module
  using description file: [absolute path to my repo]/package.json (relative path: ./src)
    Field 'browser' doesn't contain a valid alias configuration
    aliased with mapping 'components': '[absolute path to my repo]/src/components' to '[absolute path to my repo]/src/components/DoISuportIt'
      using description file: [absolute path to my repo]/package.json (relative path: ./src)
        Field 'browser' doesn't contain a valid alias configuration
      after using description file: [absolute path to my repo]/package.json (relative path: ./src)
        using description file: [absolute path to my repo]/package.json (relative path: ./src/components/DoISuportIt)
          as directory
            [absolute path to my repo]/src/components/DoISuportIt doesn't exist
          no extension
            Field 'browser' doesn't contain a valid alias configuration
            [absolute path to my repo]/src/components/DoISuportIt doesn't exist
          .js
            Field 'browser' doesn't contain a valid alias configuration
            [absolute path to my repo]/src/components/DoISuportIt.js doesn't exist
          .jsx
            Field 'browser' doesn't contain a valid alias configuration
            [absolute path to my repo]/src/components/DoISuportIt.jsx doesn't exist
[[absolute path to my repo]/src/components/DoISuportIt]
[[absolute path to my repo]/src/components/DoISuportIt]
[[absolute path to my repo]/src/components/DoISuportIt.js]
[[absolute path to my repo]/src/components/DoISuportIt.jsx]

paquet.json

{
  "version": "1.0.0",
  "main": "./src/main.js",
  "scripts": {
    "build": "webpack --progress --display-error-details"
  },
  "devDependencies": {
    ...
  },
  "dependencies": {
    ...
  }
}

En ce qui concerne le browser La documentation que j'ai pu trouver à ce sujet est la suivante : package-browser-field-spec . Il existe également de la documentation sur webpack à ce sujet, mais il semble qu'elle soit activée par défaut : aliasFields: ["browser"] . J'ai essayé d'ajouter un browser à mon package.json mais ça n'a pas semblé faire de bien.

webpack.config.js

import path from 'path';
const source = path.resolve(__dirname, 'src');

export default {
  context: __dirname,
  entry: './src/main.js',
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: '[name].js',
  },
  resolve: {
    alias: {
      components: path.resolve(__dirname, 'src/components'),
    },
    extensions: ['.js', '.jsx'],
  },
  module: {
    rules: [
      {
        test: /\.(js|jsx)$/,
        include: source,
        use: {
          loader: 'babel-loader',
          query: {
            cacheDirectory: true,
          },
        },
      },
      {
        test: /\.css$/,
        include: source,
        use: [
          { loader: 'style-loader' },
          {
            loader: 'css-loader',
            query: {
              importLoader: 1,
              localIdentName: '[path]___[name]__[local]___[hash:base64:5]',
              modules: true,
            },
          },
        ],
      },
    ],
  },
};

src/main.js

import DoISuportIt from 'components/DoISuportIt';

src/composants/DoISuportIt/index.jsx

export default function() { ... }

Pour être complet, .babelrc

{
  "presets": [
    "latest",
    "react"
  ],
  "plugins": [
    "react-css-modules"
  ],
  "env": {
    "production": {
      "compact": true,
      "comments": false,
      "minified": true
    }
  },
  "sourceMaps": true
}

Qu'est-ce que je fais de mal/manque ?

52 votes

J'adore toutes les réponses "dans mon cas". Cela montre à quel point Webpack est un outil terrible. Imaginez renvoyer une seule erreur générique pour divers scénarios "dans mon cas" !

291voto

Matthew Herbst Points 386

Il s'est avéré qu'il s'agissait d'un problème avec Webpack qui ne résolvait pas un import - les messages d'erreur sont horribles :(

// Had to change
import DoISuportIt from 'components/DoISuportIt';

// To (notice the missing `./`)
import DoISuportIt from './components/DoISuportIt';

3 votes

Le problème est-il causé par npm ? Aujourd'hui, j'ai mis à jour un module en utilisant npm, en désinstallant et en installant une dernière version du module, maintenant j'ai obtenu cette erreur et l'erreur dit de changer l'emplacement relatif du module, mais la liste des fichiers est un peu élevé, ce qui a causé tous ces fichiers de changer sa position relative ?

4 votes

Cela a aussi sauvé mon cul. C'est un peu contre intuitif que dans les fichiers sass vous pouvez importer avec 'folder' mais dans les fichiers .js vous devez le faire comme './folder'. De plus, sans --display-error-details, il n'y a AUCUN message d'erreur, il y a juste un crash.

1 votes

Merci beaucoup. Vous avez sauvé ma journée.

34voto

Artif3x Points 10

Je construis un moteur de rendu côté serveur React et j'ai constaté que cela peut également se produire lors de la construction d'une configuration de serveur distincte à partir de zéro. Si vous voyez cette erreur, essayez ce qui suit :

  1. Assurez-vous que votre valeur "entrée" est correctement positionnée par rapport à votre valeur "contexte". Dans le mien, il manquait le préfixe "./" avant le nom du fichier d'entrée.
  2. Assurez-vous que votre valeur "resolve" est incluse. Dans le cas contraire, vos importations sur tout ce qui se trouve dans node_modules seront recherchées par défaut dans votre dossier "context".

Ejemplo:

const serverConfig = {
name: 'server',
context: path.join(__dirname, 'src'),
entry: {serverEntry: ['./server-entry.js']},
output: {
    path: path.join(__dirname, 'public'),
    filename: 'server.js',
    publicPath: 'public/',
    libraryTarget: 'commonjs2'
},
module: {
    rules: [/*...*/]
},
resolveLoader: {
    modules: [
        path.join(__dirname, 'node_modules')
    ]
},
resolve: {
    modules: [
        path.join(__dirname, 'node_modules')
    ]
}
};

20voto

Baltzar Mattson Points 61

J'ai eu le même problème, mais le mien était dû à une mauvaise enveloppe dans le chemin :

// Wrong - uppercase C in /pathCoordinate/
./path/pathCoordinate/pathCoordinateForm.component

// Correct - lowercase c in /pathcoordinate/
./path/pathcoordinate/pathCoordinateForm.component

2 votes

C'était aussi mon problème. Cependant, il a bien fonctionné sur mon ordinateur portable Windows, mais a échoué sur le serveur, qui était Linux.

7voto

Abraham Jagadeesh Points 156

J'ai changé mon entrée en

entry: path.resolve(__dirname, './src/js/index.js'),

et ça a marché.

4voto

Leon Points 166

Dans mon cas, jusqu'à la fin de l'année. webpack.config.js où je devrais exports la configuration, il y avait une faute de frappe : export (devrait être exports ), ce qui a conduit à une défaillance avec une charge webpack.config.js du tout.

const path = require('path');

const config = {
    mode: 'development',
    entry: "./lib/components/Index.js",
    output: {
        path: path.resolve(__dirname, 'public'),
        filename: 'bundle.js'
    },
    module: {
        rules: [
            {
                test: /\.js$/,
                loader: 'babel-loader',
                exclude: path.resolve(__dirname, "node_modules")
            }
        ]
    }
}

// pay attention to "export!s!" here
module.exports = config;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X