Корневой каталог в package.json
Мой вопрос касается существующей библиотеки, которую я хочу опубликовать в качестве модуля NPM. Библиотека уже используется, а в настоящее время require
d через локальную файловую систему.
Как я могу указать корневую директорию моих файлов модулей?
Если у меня есть структура вроде:
.
├── package.json
├── src
| ├── js
| └────── lib
| └───────── my
| └───────────── thing.js
| └───────────── that.js
Как указать, что корень моего модуля и доступные файлы src/js/lib/my/
?
Я хотел бы использовать, как следует из внешнего проекта:
var thing = require('my/thing'),
that = require('my/that');
Я видел свойство "files"
в package.json, это правильный путь?
Ответы
Ответ 1
Как doc говорит:
Основное поле - это идентификатор модуля, который является основной точкой входа в вашу программу.
Итак, у вас будет что-то вроде "main": "src/js/lib/my/app.js"
в вашем файле package.json.
Я предлагаю вам создать файл app.js
и module.exports
ваших разных детей. Например:
module.exports.thing = require('./thing');
module.exports.that = require('./that');
И используйте их следующим образом:
var mylib = require('mylib')
, thing = mylib.thing
, that = mylib.that;
Ответ 2
package.json
- это в основном файл, используемый npm
для установки и управления зависимостями.
Конструкция require
не заботится о package.json
, поэтому вы не сможете ее использовать, чтобы подорвать способ require
и заставить его полагать, что пакеты не там, где ожидает схема загрузки require
их.
Смотрите документацию https://nodejs.org/api/modules.html и схему загрузки здесь: https://nodejs.org/api/modules.html#modules_all_together
возможно, вы можете использовать технику, которую документация вызывает "Загрузка из глобальных папок" и определить переменную среды NODE_PATH
.
но я советую вам придерживаться более стандартного способа:
- поместите свои модули в каталог node_modules
- или запустите иерархию модулей в том же каталоге, где расположены ваши app.js или index.js
Ответ 3
В webpack вы можете указать resolve.alias
следующим образом:
{
resolve: {
alias: {
'my': 'my/src'
}
}
}
или вы можете указать опцию directions
в package.json
{
directions: {
'lib': 'src/lib'
}
}