Подтвердить что ты не робот

Корневой каталог в 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, это правильный путь?

4b9b3361

Ответ 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'
  }
}