NPM-зависимость, которая импортирует / требует из корня приложения - PullRequest
0 голосов
/ 20 июня 2019

Допустим, я создаю приложение под названием App. Он устанавливает зависимость npm под названием package.

Теперь, скажем, package требует, чтобы App имел следующую файловую структуру:

  • App /
    • node_modules /
      • пакет /
        • index.js
        • package.json
    • папка /
      • file.js
    • index.js
    • package.json

В пределах App/node_modules/package/index.js требуется импортировать / запрашивать файл, расположенный в App/folder/file.js.

Например:

import File from "../../folder/file";

Это лучший способ сделать это? Можно ли как-то ссылаться на корень приложения в импорте вместо необходимости использовать ../../?

1 Ответ

1 голос
/ 20 июня 2019

Нет.Это не лучший способ сделать это.Модули не должны требовать от своих пользователей.

Вместо этого используйте внедрение зависимостей - пусть ваш пользователь передает вам требуемые объекты:

package / index.js

let File = null;

function init (fileModule) {
    File = fileModule;
}

export init;

// ...

Таким образом, выможет передать объект File из вашего основного приложения:

App / index.js

import { init } from 'package';
import File from './folder/file';

init(File);

Как вы разрабатываете API для передачи вашего "промежуточного программного обеспечения",вам решать.Выше это просто предложение.Вы можете передать его в качестве аргумента в конструктор, например:

const package = new Package(File);

Это на самом деле, как работает фреймворк, такой как Express.Это позволяет расширять Express, не зная структуры вашего кода:

app.use(someMiddleware); // Express never "requires" your middleware
                         // instead it allows you to pass middleware to itself
...