清洁package.json" main"用于需要

时间:2015-08-21 17:26:01

标签: javascript node.js path require package.json

我希望保持路径相对,并且始终将它放在前导目录之前。

我们说我有一个字符串hello。在hellopackage.main引用./hello.js是完全有效的。但是,如果您使用hello并要求它,它将查找hello node_module而不是文件。如何使用路径将hello加上./前缀?问题是package.json main可以有这些有效的选项。我并不是说这些都指向相同的文件。我说hello.jshello无法直接放入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)

1 个答案:

答案 0 :(得分:2)

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

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