Как потребовать файл, отличный от основного файла npm, в node?

package.json:

...
"name": "mypackage",
"main": "src/index.js"
...

Структура каталогов:

|- src/
|--- index.js
|--- other.js

Я могу потребовать src/index.js с require('mypackage');, но как мне потребовать src/other.js?

Если ответ require('mypackage/src/other');, есть ли способ сделать это, поэтому я могу потребовать его с помощью require('mypackage/other'); (т.е. обучения node, что каталог исходного файла вашего модуля?

Ответы

Ответ 1

AFAIK Вам придется явно разоблачить его в корне:

Структура каталогов:

|- src/
|--- index.js
|--- other.js
|- other.js

Тогда в /other.js

module.exports = require('src/other.js');

Теперь вы можете сделать require('mypackage/other')

Ответ 2

В настоящее время я просматриваю то же самое.

Package.json имеет свойство "файлы":

http://blog.kewah.com/2014/npm-as-a-front-end-package-manager/

https://docs.npmjs.com/files/package.json

Поле "файлы" - это массив файлов для включения в ваш проект. Если вы укажете папку в массиве, то она также будет содержать файлы внутри этой папки.

Но мне еще предстоит найти, как выполнить импорт/требование такого файла. Я действительно не вижу другого смысла перечислять эти файлы, кроме того, чтобы иметь возможность import/require их?


Мне удалось импортировать файл из пакета, если он был указан в этом массиве файлов.

{
    "name": "local-ui-utilities",
    "version": "0.0.1",
    "description": "LOCAL UI Utilities",
    "main": "index.jsx",
    "author": "Norbert de Langen",
    "license": "none",
    "dependencies": {
    },
    "files": [
       "/colors/sets/variables.css"
    ]
}

Я могу импортировать файл css из пакета, используя postcss-import:

@import "local-ui-utilities/colors/sets/a.css";

Это, вероятно, не ваш прецедент, но postcss-import просто использует npm под капотом. Так что это должно работать и для вашего случая использования, я бы подумал.

Этот вопрос и принятый ответ кажутся взаимосвязанными: Node/NPM: может ли один пакет npm выставить более одного файла?

Ответ 3

Вам придется явно открыть файл в корневой папке, но многие проекты (включая более старые версии lodash) делают это как часть предварительного этапа публикации. Фактически там пакет, который делает именно то, что предлагает @Creynders, добавляя module.exports = require('./path/to/file') файлы в корневую папку. Некоторое время назад я начал писать руководство, но суть довольно проста.

Установить

npm install --save-dev generate-export-aliases

Настройка

{
  "name": "my-package",
  "scripts": {
    "prepublish": "generate-export-aliases"
  },
  "config": {
    "exportAliases": {
      "other": "./src/other"
    }
  }
}

Использование

const other = require('my-package/other')

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я являюсь автором пакета