Cleaning package.json“ main”与require一起使用

问题描述 投票:1回答:2

我想保持路径相对,并始终在开头目录前添加路径。

假设我有一个字符串hello。将hello中的package.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-> same]]
  • [./hello.js-> same]]
  • hello.js-> ./hello.js
  • [../hello-> same]]
  • [./hello-> same]]
  • hello-> ./hello
  • 我应该只创建一个正则表达式来查看路径吗?如何确保它可以跨平台运行?

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

我想保持路径相对,并始终在开头目录前添加路径。假设我有一个字符串你好。在package.main中引用。/ ...

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

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

我不确定您是否正在寻找特别的东西,但是createRequirecreateRequire可能会为您提供帮助:

require.resolve
javascript node.js path require package.json
2个回答
2
投票

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

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

0
投票

我不确定您是否正在寻找特别的东西,但是createRequirecreateRequire可能会为您提供帮助:

require.resolve
© www.soinside.com 2019 - 2024. All rights reserved.