1

我想保持路径是相对的,并且总是在它前面加上前导目录。

假设我有一个字符串hellohello在您package.main的参考中完全有效./hello.js。但是,如果您接受hello并要求它,它将查找hellonode_module 而不是文件。如何hello使用./路径前缀?问题是 package.jsonmain可以有这些有效的选项。我并不是说这些都指向同一个文件。我是这么说的,hello.js不能hello直接放进去require

  • ../hello.js
  • ./hello.js
  • hello.js
  • ../hello
  • ./hello
  • hello

如何清理所有这些路径以便它们与 require 一起工作?

path.join摆脱领先的路径,所以这是行不通的。path.resolve另一方面,确实可以清理所有这些路径以供 require 使用,但它使其成为绝对路径。

预期行为:

  • ../hello.js-> 相同
  • ./hello.js-> 相同
  • hello.js->./hello.js
  • ../hello-> 相同
  • ./hello-> 相同
  • hello->./hello

我应该只创建一个正则表达式来查看路径吗?我如何确保它可以跨平台工作?

var pkg = require('./package.json')
// var mainPackage = cleanMain(pkg.main)
// var main = require(mainPackage)
4

1 回答 1

2

要求节点中的路径仅使用正斜杠/,即使在 Windows 上也是如此,这样可以消除一个复杂性。node_modules除此之外,它查找路径和查找路径之间的区别在于它是否以 a.或开头/。( Docs. ) clean 函数可以是一个简单的正则表达式测试,如下所示:

function clean(s) {
  if (!/^[\.\/]/.test(s)) {
    s = './' + s;
  }
  return s;
}
于 2015-08-21T18:21:54.207 回答