从应用程序根目录导入/需要的NPM依赖项

时间:2019-06-20 07:29:59

标签: javascript reactjs npm es6-modules

假设我创建了一个名为App的应用。它会安装一个名为package的npm依赖项。

现在假设package要求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 个答案:

答案 0 :(得分:1)

不。这不是最好的方法。模块不应来自其用户。

改为使用依赖项注入-让您的用户向您传递所需的对象:

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