Webpack 2: не удается разрешить модуль

У меня есть такой проект:

root/
    webpack-config.js
    app/
       app.js
       js/
         dep.js
    core/
        module.js

Вот файл конфигурации веб-пакета:

module.exports = {
    entry: './app/app.js',
    output: {
        path: __dirname,
        filename: "[name]-bundle.js"
    },
    module: {
        loaders: [
            { test: /\.js$/, loader: 'babel-loader', exclude: /node_modules/     }          
        ]
    },
    resolve: {
      modulesDirectories: ['core']
    }
    ...

в app.js у меня есть:

import local_dep from './js/dep';
import myModule from 'module';

Это работает, как и ожидалось, с webpack 1.x, но модуль myModule не разрешается с помощью webpack 2, я получаю сообщение «Модуль не найден: не удается разрешить« модуль »в ... \ app».

Кажется, что запись modulesDirectories игнорируется, а базовый URL-адрес соответствует папке записи.

Что я могу сделать, чтобы модули правильно разрешались с помощью webpack 2?


person warpdesign    schedule 01.07.2016    source источник
comment
У Кристофера Дэвиса есть правильный ответ, вы должны выбрать его.   -  person Leon Gaban    schedule 17.07.2017


Ответы (3)


Изменить: как уже отмечали другие, для Webpack 2 работает что-то вроде этого:

{
  resolve: {
    extensions: ['.js', '.jsx'],
    modules: ['node_modules', path.resolve(__dirname, 'core')]
  },
}

Для Webpack 1 у меня есть настройка с этой записью:

config.resolve = {
  // Allows us to include js and jsx files without specifying the extension
  extensions: ['', '.jsx', '.js'],

  root: [path.resolve('./core')]
};
person Christopher Davies    schedule 01.07.2016
comment
На самом деле под «глобальным» я имел в виду глобальный модуль, а не глобальный объект. Я отредактировал свой вопрос. - person warpdesign; 03.07.2016
comment
Если вы читали документ, как цитировал выше laggingreflex, root больше не является частью синтаксиса разрешения конфигурации Webpack 2. Просто модули. - person Will; 14.02.2017
comment
Этот ответ верен для Webpack v1.x, но при переходе к Webpack v2.x объект resolve.modules заменяет modulesDirectories и root - person Dylan Pierce; 09.03.2017

из: http://moduscreate.com/webpack-2-tree-shaking-configuration/

В Webpack 2 распознаватели из настроек root, modulesDirectories и fallback будут объединены в одно свойство — modules. Вот как мы можем разрешить расположение файлов и модулей в Webpack 2:

  resolve: {
    modules: [
      path.resolve('./client'),
      'node_modules'
    ]
  },

Вы можете указать несколько каталогов в modules, но убедитесь, что не забыли node_modules, иначе зависимости пакетов npm не загрузятся.


Итак, в вашем случае, что было раньше:

resolve: {
  modulesDirectories: ['core']
}

теперь нужно быть

resolve: {
  modules: ['core'] // also 'node_modules' 
}
person laggingreflex    schedule 08.10.2016

Благодаря Кристоферу Дэвису я решил проблему, добавив:

resolveLoader: {
  root: path.join(__dirname, 'node_modules')
},
resolve: {
    root: ['./core']
}

Мне пришлось добавить строку resolveLoader, иначе я получал ошибку о загрузчике babel, который не мог быть загружен.

person warpdesign    schedule 03.07.2016