【问题标题】:Cleaning package.json "main" for use with require清理 package.json "main" 以与 require 一起使用
【发布时间】:2015-11-15 17:44:17
【问题描述】:

我想保持相对路径,并始终在其前面加上前导目录。

假设我有一个字符串hello。在您的package.main 中包含hello 以引用./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 -> 一样
  • ./hello.js -> 相同
  • hello.js -> ./hello.js
  • ../hello -> 一样
  • ./hello -> 相同
  • hello -> ./hello

我应该只创建一个正则表达式来查看路径吗?如何确保它可以跨平台运行?

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

【问题讨论】:

    标签: javascript node.js path require package.json


    【解决方案1】:

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

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

    【讨论】:

    • 这是有道理的!谢谢!
    猜你喜欢
    • 2011-06-02
    • 2019-09-27
    • 1970-01-01
    • 2016-11-13
    • 1970-01-01
    • 1970-01-01
    • 2016-09-17
    • 2014-04-13
    • 2020-06-13
    相关资源
    最近更新 更多