2016-06-21 3 views
7

Это моя структураWebpack - Как разрешить модуль рекурсивно

project 
    |app 
    |component 
     |Header.js 
     |Home.js 
    |sass 
     |header.scss 
    |node_modules 
    |moment 

папка Это, как я хочу импортировать модули в Home.js

import Header from 'Header' 
import 'header.scss' 
import moment from 'moment' 

Как конфиг WebPack так, что понять, что модуль Я пытаюсь импортировать?

+1

Не боитесь конфликта имен модулей, если вы динамически создаете 'modulesDirectories'? Вы можете получить erros довольно быстро и противно отлаживать. – Everettss

+0

webpack уведомит, когда будет дублировано. И решения для этого явно импортируют одно имя с путями. Или переименуйте дублированный в нечто более значимое, хорошо назвать компонент более конкретным в любом случае. –

+1

Как webpack рассказать разницу между модулем, установленным через npm, и «локальным» (из-за отсутствия лучшего слова)? Как знал бы коллега? Или будущее? Если вы ищете выход из адреналина относительного пути, я бы скорее посмотрел на [babel-root-import] (https://www.npmjs.com/package/babel-root-import), если вы используя babel или что-то подобное, если вы не, но это всего лишь мои 5 центов. – ivarni

ответ

2

Вот как я это делаю. Нужно вручную добавить больше каталога в массив, когда есть новый.

resolve: { 
    modulesDirectories: [ 
     'app', 
     'app/component', 
     'app/sass', 
     'node_modules', 
     'bower_components' 
    ] 
}, 
1

Вы не указываете относительные пути в операторах импорта. moduleDirectories не предназначен для перечисления всех каталогов, а только для корней.

Ваши операторы импорта должны, вероятно, выглядеть следующим образом: (Предполагая, что они доступны из в app/)

import './component/Header' 
import './sass/header.scss' 

Тогда moduleDirectories нужно только включить «приложение», а не подпапки их.

+0

Я просто хочу импортировать без дорожек. Есть ли у вас какие-либо предложения по этому поводу? –

1

Вы можете посмотреть на использование Бабель псевдонимами

https://www.npmjs.com/package/babel-plugin-module-alias

и настройки что-то вроде этого:

{ "src": "./app/component", "expose": "component" } 

Тогда

import Header from 'component/Header'; 
0

Эта ссылка поможет:

http://xabikos.com/2015/10/03/Webpack-aliases-and-relative-paths/

Но по сути, если ваш файл webpack.[production/dev].config.js в /project это потребуется alias раздел внутри resolve секции; что-то вроде этого:

module.exports = { 
    entry: path.resolve(__dirname, "./app/component/Home.js"), 
    output: { 
     path: __dirname, 
     filename: "bundle.js" 
    }, 
    module: { 
     loaders: [ 
      { test: /\.css$/, loader: "style!css" } 
     ] 
    }, 
    resolve: { 
     alias: { 
      moment: path.resolve(__dirname, './node_modules/moment/moment.js') 
     } 
    } 
}; 
Смежные вопросы