我希望保持路径相对,并且始终将它放在前导目录之前。
我们说我有一个字符串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
- >相同./hello.js
- >相同hello.js
- > ./hello.js
../hello
- >相同./hello
- >相同hello
- > ./hello
我应该创建一个正则表达式来查看路径吗?我怎样才能确保它能跨平台工作?
var pkg = require('./package.json')
// var mainPackage = cleanMain(pkg.main)
// var main = require(mainPackage)
答案 0 :(得分:2)
要求节点中的路径仅使用正斜杠/
,即使在Windows上也是如此,这样就消除了一个复杂性。除此之外,查看node_modules
和查找路径之间的区别在于它是以.
还是/
开头。 (Docs.)clean函数可以是一个简单的正则表达式测试:
function clean(s) {
if (!/^[\.\/]/.test(s)) {
s = './' + s;
}
return s;
}