Как потребовать файл, отличный от основного файла 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')
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я являюсь автором пакета