2015-03-19 2 views
1

Я пытаюсь создать пакет npm пары компонентов React. Они будут использоваться в нескольких других проектах, поэтому я бы хотел их в отдельном пакете.требуют («модуль/компонент»), когда компонент.js не находится в корне модуля?

Что я хотел бы сделать, это require('comps/a-component') из приложения, использующего этот пакет. Я мог бы сделать это, поместив все мои компоненты в корневой модуль модуля, но я не хочу этого делать. Вместо этого я хочу иметь все компоненты в src/components /, потому что корень будет переполнен.

Это кажется тривиальной задачей, но я еще не успел. Я просмотрел https://docs.npmjs.com/files/package.json, пытаясь найти возможность установить корень или что-то в этом роде. Есть ли у кого-нибудь идеи о том, как достичь этого?

Спасибо!

ответ

0

Вы можете сделать символическую ссылку в вас node_modules директорию в директорию компонентов. Это позволит вам требовать от ваших компонентов из любого места вашего приложения, как вы сказали: require('comps/a-component'). Чтобы создать символическую ссылку на Linux или OSX вы можете сделать что-то вроде этого

cd ./node_modules; ln -snf ../src/components comps; 

Другим вариантом было бы на самом деле создать НПМ пакеты из каждого компонента, таким образом, вы могли бы иметь их в списке в ваших зависимостях пакета. JSON.

Другим перспективным вариантом, который был выпущен в npm 2.0, являются локальные зависимости. Это позволяет указывать на локальный пакет npm в вашей файловой системе. В этом случае каждый компонент должен быть записан как пакет npm с пакетом. Json https://docs.npmjs.com/files/package.json#local-paths

+0

Спасибо, я, вероятно, поеду с опцией symlink. Создание модуля из каждого компонента на самом деле не является вариантом, так как «пара компонентов» в моем случае, вероятно, больше похоже на 20+ :) – Alexander

0

Если ваше приложение выглядит так:

- AppFolder 
    |-index.js 
    |-Readme.md 
    |-/src 
     |-app.js 
     |-anotherThing.js 

Если я хочу использовать anotherThing.js, я могу просто сделать var anotherThing = require('./src/anotherThing');. Если я не пойму вашу проблему.

Или, может быть, вы имели в виду the main attribute in package.json

+0

Я мог бы выполнить 'require ('comps/src/components/a-component')', но он чувствует себя немного подробным. – Alexander

+0

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

+0

Я попытался использовать основной атрибут, но это не изменяет путь root/search модулей, он указывает только на основной модуль. – Alexander