清洗package.json“主要”用于require
我想保持相对path,并始终使用前导目录。
比方说,我有一个stringhello
。 在你的package.main
中引用./hello.js
hello
是完全有效的。 但是,如果你打了hello
并要求它,它会寻找hello
node_module而不是文件。 我怎样才能用./
使用path前缀hello
? 问题是package.json main
可以有这些有效的选项。 我不是说这些都指向相同的文件。 我在说hello.js
和hello
不能直接放在require
。
-
../hello.js
-
./hello.js
-
hello.js
-
../hello
-
./hello
-
hello
我怎样才能清理所有这些path,以便他们能够处理require?
path.join
摆脱主导path,所以这是行不通的。 另一方面, path.resolve
确实可以清除所有这些用于require的path,但是它使得它成为绝对path。
预期的行为:
-
../hello.js
– >相同 -
./hello.js
– >相同 -
hello.js
– >./hello.js
-
../hello
– >相同 -
./hello
– >相同 -
hello
– >./hello
我应该创build一个正则expression式来看看path吗? 我如何确保它能够跨平台工作?
var pkg = require('./package.json') // var mainPackage = cleanMain(pkg.main) // var main = require(mainPackage)
要求节点中的path只使用正斜杠/
,即使在Windows上也是如此,这样可以消除一个复杂的问题。 除此之外,查看node_modules
和查找path的区别在于它是否以a开头.
或/
。 ( 文档 )干净的function可能是这样一个简单的正则expression式testing:
function clean(s) { if (!/^[\.\/]/.test(s)) { s = './' + s; } return s; }