javascript - Node.js 包自引用

标签 javascript node.js package require

require 本身及其子系统可以吗?

例如有模块: src/deep/path/to/module.js 这需要要求 src/another/module.js

代替:

require('./../../../another/module.js');

一个可以:

require('<self>/another/module.js');

?

例如,这在测试中可能很有用:测试单元可以引用其测试对象,而无需长长的上下式路径。

我有两个考虑(但都不能完全满足这个问题):

  1. 如果包已经在 node_modules 文件夹中,它可以通过它自己引用 规范名称(在其 package.json 中)。

  2. 包可以在它自己的 node_modules 文件夹中创建指向它自己的符号链接(symbolic link)(原文如此!)。还没有尝试过,可能会在一些解决的情况下导致死循环。

最佳答案

解决方案1

将其拆分为不同的子项目,将每个子项目放入不同的文件夹中。例如:

  sub.project.1/  
  sub.project.2/

在子项目.1/

  # cd ../sub.project.1
  npm link

  # cd ../sub.project.2
  npm link sub.project.1

然后在 sub.project.2 中你可以简单地做到这一点:

var something = require("sub.project.1")

这可以删除 '../../...' 相对路径。

注意:它可以在同一个文件夹/项目中完成,通过这样做, 在子文件夹中,可以轻松引用项目self。 例如,当 sub.project.1sub.project.2 都被 my.project 替换时。当然,所有的名字都应该是npm初始化的package.json中的name

解决方案2

在文件夹 node_modules/ 中创建链接

  # cd node_modules
  ln  -s ..  myProjectRootDir
  #
  # where: .. : means parent directory in linux shell
  # '#' means comments in linux shell
  # 

那么在同级目录树下就可以使用了:

  var something = require("myProjectRootDir/path/to/js/file")

因此“../../...”可以更改为更容易读取的路径。 如果 myProjectRootDir 恰好是项目名称并且 package.json中的包名,没问题。

解决方案 3

有npm包:require-self, install-self, 他们做类似的事情。

解决方案4

在容易require的地方写一个新的.js文件, 然后将所有烦人的相对引用放入其中。

例如写在node_modules/mymods.js

  // mymod.js
  module.exports.mod_one = require("../path/to/mod/one.js"); 
  //...

然后 require('mymod') 可以给所有其他模块。 这不是最好的解决方案,需要的所有引用资料 需要手工完成。但它是一个文件,所以它是 可管理,并集中了 future 部署的引用。

这个解决方案的一个缺点是,如果你把它放在 node_modules/ 文件夹,此文件夹在 git 仓库中被忽略,在推送或分支 git 仓库时需要小心。

删除node_modules文件夹时,也会误删文件。

可能还有更多我不知道的解决方案。

关于javascript - Node.js 包自引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22442697/

相关文章:

javascript - jQuery 无法与我的 Blazor 应用程序正常工作

javascript - this.state.items.map 不是函数

javascript - 如何在mongodb中分配id值?

java - Java包: cannot find symbol (2)

javascript - 如何使用 Jquery/Javascript 在 IOS 中禁用或隐藏 native 播放器?

javascript - Angular Controller 继承/覆盖 "superclass"方法

javascript - Angular 9 ng新安装程序包卡住

javascript - 如何在 Javascript 中逐行读取文件并将其存储在数组中

Delphi 库路径 - 那里到底应该包含什么?

r - 为什么我的包中的数据是 "serialized"而不是在最新版本的 R 中读取?