清洗package.json“主要”用于require

我想保持相对path,并始终使用前导目录。

比方说,我有一个stringhello 。 在你的package.main中引用./hello.js hello是完全有效的。 但是,如果你打了hello并要求它,它会寻找hello node_module而不是文件。 我怎样才能用./使用path前缀hello ? 问题是package.json main可以有这些有效的选项。 我不是说这些都指向相同的文件。 我在说hello.jshello不能直接放在require

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

我怎样才能清理所有这些path,以便他们能够处理require?

path.join摆脱主导path,所以这是行不通的。 另一方面, path.resolve确实可以清除所有这些用于require的path,但是它使得它成为绝对path。

预期的行为:

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

我应该创build一个正则expression式来看看path吗? 我如何确保它能够跨平台工作?

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

要求节点中的path只使用正斜杠/ ,即使在Windows上也是如此,这样可以消除一个复杂的问题。 除此之外,查看node_modules和查找path的区别在于它是否以a开头./ 。 ( 文档 )干净的function可能是这样一个简单的正则expression式testing:

 function clean(s) { if (!/^[\.\/]/.test(s)) { s = './' + s; } return s; }