即使在Windows上,节点中的要求路径也仅使用正斜杠/
,这样就消除了复杂性。除此之外,它在node_modules
中查找与在路径中查找之间的区别在于它是以.
还是/
开头。 (Docs.)clean函数可以是一个简单的正则表达式测试,如下所示:
function clean(s) {
if (!/^[\.\/]/.test(s)) {
s = './' + s;
}
return s;
}
我想保持路径相对,并始终在开头目录前添加路径。
假设我有一个字符串hello
。将hello
中的package.main
引用为./hello.js
是完全有效的。但是,如果需要hello
并要求它,它将查找hello
node_module,而不是文件。如何使用路径在hello
之前加./
前缀?问题是package.json main
可以具有这些有效选项。我并不是说这些都指向相同的文件。我是说hello.js
和hello
无法直接放入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; }
我不确定您是否正在寻找特别的东西,但是
createRequire
和createRequire
可能会为您提供帮助:require.resolve
即使在Windows上,节点中的要求路径也仅使用正斜杠/
,这样就消除了复杂性。除此之外,它在node_modules
中查找与在路径中查找之间的区别在于它是以.
还是/
开头。 (Docs.)clean函数可以是一个简单的正则表达式测试,如下所示:
function clean(s) {
if (!/^[\.\/]/.test(s)) {
s = './' + s;
}
return s;
}
我不确定您是否正在寻找特别的东西,但是createRequire
和createRequire
可能会为您提供帮助:
require.resolve