清理 package.json "main" 以便与 require 一起使用

Cleaning package.json "main" for use with require

我想保持相对路径,并始终在其前面加上前导目录。

假设我有一个字符串 hello。在你的 package.main 中引用 ./hello.js 是完全有效的。但是,如果您使用 hello 并需要它,它将查找 hello node_module 而不是文件。如何使用路径在 hello 前加上 ./ 前缀?问题是 package.json main 可以有这些有效的选项。我并不是说这些都指向相同的文件。我是说 hello.jshello 不能直接放入 require.

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

path.join 去掉了前导路径,所以这不起作用。另一方面,path.resolve 确实可以清理所有这些路径以供 require 使用,但它会使其成为绝对路径。

预期行为:

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

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

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

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