清理 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.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)
要求节点中的路径仅使用正斜杠 /
,即使在 Windows 上也是如此,这样就消除了一点复杂性。除此之外,它在 node_modules
中查找和查找路径之间的区别在于它是以 .
还是 /
开头。 (Docs.) clean 函数可以是一个简单的正则表达式测试,如下所示:
function clean(s) {
if (!/^[\.\/]/.test(s)) {
s = './' + s;
}
return s;
}
我想保持相对路径,并始终在其前面加上前导目录。
假设我有一个字符串 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)
要求节点中的路径仅使用正斜杠 /
,即使在 Windows 上也是如此,这样就消除了一点复杂性。除此之外,它在 node_modules
中查找和查找路径之间的区别在于它是以 .
还是 /
开头。 (Docs.) clean 函数可以是一个简单的正则表达式测试,如下所示:
function clean(s) {
if (!/^[\.\/]/.test(s)) {
s = './' + s;
}
return s;
}