Поле "браузер" не содержит допустимой конфигурации псевдонима.

131

Я начал использовать webpack2 (если быть точным v2.3.2), и после повторного создания моей конфигурации я продолжаю сталкиваться с проблемой, которую не могу решить, я получаю (заранее извините за уродливый дамп):

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]

package.json

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

С точки зрения browserполя он жалуется, документация , я смог найти на это: package-browser-field-spec. Существует также WebPack документации на него, но, кажется, она включена по умолчанию: aliasFields: ["browser"]. Я попытался добавить browserполе в свой, package.jsonно это не помогло.

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 / компоненты / DoISuportIt / index.jsx

export default function() { ... }

Для полноты, .babelrc

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

Что я делаю не так / не хватает?

Мэтью Хербст
источник

Ответы:

102

Оказалось, что проблема в том, что Webpack просто не разрешает импорт - поговорите об ужасных ужасных сообщениях об ошибках :(

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

// To (notice the missing `./`)
import DoISuportIt from './components/DoISuportIt';
Мэтью Хербст
источник
1
Проблема вызвана npm? Сегодня я обновил модуль с помощью npm, удалив и установив последнюю версию модуля.Теперь я получил эту ошибку, и ошибка говорит об изменении относительного местоположения модуля, но список файлов немного велик, что привело к тому, что все эти файлы были изменить его взаимное положение?
ДИПАН КУМАР
2
Это тоже спасло мою задницу. Это несколько противоречит интуиции, что в файлы sass вы можете импортировать с помощью 'folder', но в файлах .js вам нужно делать это как './folder'. Также без --display-error-details нет сообщения об ошибке, как бы то ни было, он просто вылетает
CoolGoose
1
Большое спасибо. Вы спасаете мне день.
Ярослав К.
6
@Matthew Herbst, одно из самых глупых сообщений об ошибке :) Моя задница спасена, спасибо!
Дмитрий Сенькович
5
Это безумие.
coolboyjules
15

Я создаю серверный рендерер React и обнаружил, что это также может происходить при создании отдельной конфигурации сервера с нуля. Если вы видите эту ошибку, попробуйте следующее:

  1. Убедитесь, что ваше значение "entry" правильно исправлено относительно вашего значения "context". У меня отсутствовал предшествующий "./" перед именем файла записи.
  2. Убедитесь, что у вас есть значение «разрешить». В противном случае ваш импорт чего-либо в node_modules по умолчанию будет искать в вашей "контекстной" папке.

Пример:

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')
    ]
}
};
Artif3x
источник
11

У меня была такая же проблема, но моя была из-за неправильного корпуса в пути:

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

// Correct - lowercase c in /pathcoordinate/
./path/pathcoordinate/pathCoordinateForm.component
Бальцар Маттсон
источник
1
Это тоже была моя проблема. Однако он работал нормально на моем ноутбуке с Windows, но не работал на сервере, которым был Linux.
Мэтт М.
4

В моем случае это был пакет, который был установлен как зависимость package.jsonс таким относительным путем:

"dependencies": {
  ...
  "phoenix_html": "file:../deps/phoenix_html"
},

и импортирован js/app.jsсimport "phoenix_html"

Это сработало, но после обновления node, npm и т.д ... не удалось с указанным выше сообщением об ошибке.

Изменение строки импорта, чтобы import "../../deps/phoenix_html"исправить это.

тротил
источник
О нет, как вы думаете, почему Webpack так не интуитивен в этом? У меня также есть местная зависимость.
винтпройт
4

Изменил мою запись на

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

и это сработало.

Авраам Джагадиш
источник
3

В моем случае до самого конца webpack.config.js, где я должен exportsбыл конфиг, была опечатка: export(должно быть exports), что привело к сбою с загрузкой webpack.config.jsвообще.

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;
Леон
источник
3

По моему опыту, эта ошибка возникла в результате неправильного наименования псевдонимов в Webpack. В этом случае у меня был псевдоним, reduxи webpack попытался найти тот, reduxкоторый поставляется с пакетом redux в моем пути псевдонима.

Чтобы исправить это, мне пришлось переименовать псевдоним во что-то другое, например Redux.

codejockie
источник
2

Для тех, кто создает ионное приложение и пытается его загрузить. Убедитесь, что вы добавили в приложение хотя бы одну платформу. В противном случае вы получите эту ошибку.

оливье
источник
1

Для всех, у кого есть Ionic: при обновлении до последней версии @ ionic / app-scripts сообщение об ошибке лучше.

npm install @ionic/app-scripts@latest --save-dev

Это неправильный путь для styleUrls в компоненте несуществующего файла. Как ни странно, ошибок в разработке не выдало.

alex351
источник
1

В моей ситуации у меня не было экспорта внизу моего файла webpack.config.js. Просто добавив

export default Config;

решил это.

dxhans5
источник
0

Я использую "@ google-cloud / translate": "^ 5.1.4" и боролся с этой проблемой, пока не попробовал следующее:

Я открыл файл google-gax \ build \ src \ operationsClient.js и изменил

const configData = require('./operations_client_config');

в

const configData = require('./operations_client_config.json');

который решил ошибку

ERROR in ./node_modules/google-gax/build/src/operationsClient.js Module not found: Error: Can't resolve './operations_client_config' in 'C:\..\Projects\qaymni\node_modules\google-gax\build\src' resolve './operations_client_config' ......

Надеюсь, это кому-то поможет

Абер Сул
источник
0

В моем случае это произошло из-за неработающей символьной ссылки при попытке npm связать пользовательскую библиотеку angular с приложением-потребителем. После запуска npm link @ authoring / canvas

`` `" @ authoring / canvas ":" путь / к / ui-authoring-canvas / dist "`

Похоже, все в порядке, но модуль все еще не найден:

Ошибка из ссылки npm

Когда я исправил оператор импорта на что-то, что редактор мог найти Ссылка:

import {CirclePackComponent} from '@authoring/canvas/lib/circle-pack/circle-pack.component';

Я получил это, о чем упоминается в потоке переполнения:

Браузер полей не содержит допустимой конфигурации псевдонима

Чтобы исправить это, мне пришлось:

  1. cd /usr/local/lib/node_modules/packageName
  2. cd ..
  3. rm -rf packageName
  4. В корневом каталоге библиотеки запустите: a. rm -rf dist б. npm run build с. cd dist д.npm link

  5. В приложении-потребителе обновите package.json, указав "packageName": "file: / path / to / local / node_module / packageName" "

  6. В корневом каталоге приложения-потребителя запустите npm link packageName

Sankofa
источник
0

В моем случае я использовал неверный templateUrl, исправив его, проблема решена.

@Component({
        selector: 'app-edit-feather-object',
        templateUrl: ''
    })
Амир Хосейн Резаи
источник
-1

В моем случае это связано с опечаткой с учетом регистра в пути импорта. Например,

Должно быть:

import Dashboard from './Dashboard/dashboard';

Вместо того:

import Dashboard from './Dashboard/Dashboard';
wltheng
источник