2016-06-21 14 views
7

To moja struktura folderówWebPACK - Jak rozwiązać moduł rekurencyjnie

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

ten sposób chcę moduły przywozowe w Home.js

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

Jak config WebPack, tak aby zrozumieć, co moduł Próbuję zaimportować?

+1

Nie boisz się konfliktów nazw modułów, jeśli budujesz dynamicznie 'modulesDirectories'? Możesz uzyskać erros dość szybko i nieprzyjemnie do debugowania. – Everettss

+0

Webpack powiadomi o powieleniu. Rozwiązania tego są jednoznacznie importowane o tej samej nazwie ze ścieżkami. Lub zmień nazwę duplikatu na coś bardziej znaczącego, mimo to dobrze jest nazwać komponent bardziej konkretnym. –

+1

W jaki sposób webpack mógłby odróżnić moduł zainstalowany za pomocą npm od "lokalnego" (z braku lepszego słowa) modułu? Jak wiedziałby o tym kolega? A może w przyszłości? Jeśli szukasz sposobu na wyjście z piekła importu względnego, prawdopodobnie wolałbym spojrzeć na [babel-root-import] (https://www.npmjs.com/package/babel-root-import), jeśli jesteś używając babel lub czegoś podobnego, jeśli nie, ale to tylko moje 5 centów. – ivarni

Odpowiedz

2

Tak to robię. Będzie musiał ręcznie dodać więcej katalogów w tablicy, gdy pojawi się nowy.

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

Nie określasz względnych ścieżek w instrukcjach importu. moduleDirectories nie jest przeznaczony do wypisywania każdego katalogu, tylko do katalogu głównego.

swoje wypowiedzi na przywóz powinny prawdopodobnie wyglądać tak: (Zakładając, że są one dostępne od w app/)

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

Następnie moduleDirectories tylko musi zawierać aplikację „”, a nie jego podfolderów.

+0

Chcę tylko importować bez ścieżek. Czy masz jakieś sugestie, aby to zrobić? –

0

Ten link powinien pomóc:

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

Ale zasadniczo, jeśli plik webpack.[production/dev].config.js jest w /project będzie musiała sekcję alias w sekcji resolve; coś takiego:

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') 
     } 
    } 
}; 
Powiązane problemy