【问题标题】:NPM dependency that imports/requires from the app's root从应用程序的根目录导入/需要的 NPM 依赖项
【发布时间】:2019-06-20 15:42:24
【问题描述】:

假设我创建了一个名为 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";

这是最好的方法吗?有什么方法可以在导入时引用应用程序的根目录而不需要使用../../?

【问题讨论】:

    标签: javascript reactjs npm es6-modules


    【解决方案1】:

    没有。这不是最好的方法。模块不应要求其用户。

    改为使用依赖注入 - 让您的用户将您需要的对象传递给您:

    包/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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-29
      • 2019-12-13
      • 2020-05-15
      • 2015-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多