【问题标题】:How to prevent using relative paths require beyond the package in Node.js?如何防止在 Node.js 中的包之外使用相对路径?
【发布时间】:2019-05-07 20:12:55
【问题描述】:

假设项目在同一级别上有 2 个包:

  • 包1
    • 应用程序
      • test1.js
    • package.json
  • 包2
    • 应用程序
      • test2.js
    • package.json

我想阻止 package1 中“package2 文件”的任何相对路径导入,反之亦然。例如不允许在 package1/app/test1.js 中导入 require(../../package2/app/test2.js)。

我们可以写一些静态分析器来做这样的检查,但是不知道有没有现成的工具可以解决这个问题?

【问题讨论】:

    标签: node.js requirejs node-modules


    【解决方案1】:

    这是一种代码味道,表明您的两个包确实不是独立的。处理跨包依赖的正确方法是发布package1并将其包含在package2的依赖中,并通过在其目录中运行npm install使其对package2可用。

    在开发这两个包时,您可以避免发布您的模块,方法是在package1 的目录中运行npm link,使其在全局包缓存中可用,并使其对package2 可用,您可以运行npm link package1 来自package2 的目录。

    【讨论】:

    • 您好,ctt,感谢您的回复。当然,有更好的方法来构建包和管理依赖项。问题是如何预防坏道?
    • 为了防止坏方法,您应该确保使用require(..) 到达包外部使用commonjs 搜索路径。提供指向目录树的require() 的相对路径将使任何不共享您的确切开发设置的开发人员无法使用该包。目的是通过简单地npm install-ing 来使用包。
    • 谢谢ctt!这是否意味着我可以调整一些设置来以特定方式设置开发?如果你有任何例子,你能指出我吗?免责声明:我是 Node.js 的超级新手。不幸的是,我们的项目使用超出其范围的相对导入很繁重,因此我们希望在代码审查之外添加硬失败检查(自动化)。
    猜你喜欢
    • 2017-12-22
    • 1970-01-01
    • 2015-03-02
    • 2012-07-07
    • 1970-01-01
    • 2019-07-18
    • 2020-12-07
    • 2018-09-08
    • 1970-01-01
    相关资源
    最近更新 更多