2017-02-19 9 views
1

У меня есть библиотека (ES6), который состоит на многих суб-модулей, говорятупаковки суб-модули с накопительным пакетом для узла

- package.json 
- lib 
    - my_package 
    - file1.js 
    - file2.js 
    - sub_module1 
     - file3.js 
     - file4.js 

я в настоящее время сделать импорт, как это (все внутри моего пакета - используя разрешение файла найти, не node_modules разрешения):

import {func1} from 'lib/my_package/file1' 
import {func3} 'lib/my_package/sub_module1/file3' 

Таким образом, на практике у меня есть много файлов через подкаталоги.

Теперь я пытаюсь упаковать и опубликовать свою библиотеку, которая будет установлена ​​в узле node_modules.

Мне кажется, что алгоритм разрешения узла (когда за node_modules) допускает только одну точку входа (и нет ничего Накопительного можно сделать по этому поводу)

Я хотел бы иметь возможность включать много суба каталогов и файлов и для их решения индивидуально.

Насколько я понимаю, я должен включить один файл верхнего уровня, в котором есть все машины export from. Я могу импортировать только этот файл верхнего уровня.

Это означает, что нужно вручную создать этот файл. Это также означает потерю структуры структурирования имени подмодуля, которая поступает из структуры каталогов.

Мне было интересно: есть ли способ импортировать любой другой файл из узла node_module напрямую?

ответ

1

алгоритм разрешения в Node только решает первую часть источника модуля, так что если кто-то делает это ...

var foo = require('your-library/subdir/foo.js'); 

... затем узел (или Browserify/Webpack/накопительный-плагин-узловой-решительность) будет правильно решить, что

/path/to/project/node_modules/your-library/subdir/foo.js 

Хитрость в том, что вы хотите, чтобы автор модулей JavaScript, но если кто-то использует вашу библиотеку в узле, то они должны CommonJS модули. Накопитель не может помочь вам здесь - вам нужно будет сделать индивидуальное преобразование ESM-> CJS для каждого модуля. Таким образом, это означает либо использование Babel, либо создание модулей CommonJS в первую очередь.

+0

Действительно, это правильно. Я хотел бы добавить, что package.json не должен иметь основную запись. –