【问题标题】:Why the need for browserify `paths` definition?为什么需要 browserify `paths` 定义?
【发布时间】:2017-06-07 12:09:45
【问题描述】:

链接https://github.com/jhades/angularjs-gulp-example/blob/master/gulpfile.js 具有使用browserify paths 的gulp build-js 任务定义。我不明白它的必要性...是否可以将条目指定为entries: './js/**/*.js',,这会导致它也搜索所有子目录...而不是明确指定@987654325 @ 都是同一个父目录的子目录?

任何提示表示赞赏。

【问题讨论】:

    标签: javascript angularjs node.js gulp browserify


    【解决方案1】:

    作者正在使用paths 配置来启用非相对require 调用,例如these

    require('todoCtrl');
    require('todoStorage');
    require('todoFocus');
    require('todoEscape');
    require('footer');
    

    Browserify 模拟 Node 的模块解析机制(解释为 here),当 Node 解析非相对的 require 时,它会查找 node_modulespaths 选项为 Browserify 提供了一个不在 node_modules 中的路径列表,它应该在尝试解析非相对 require 调用时检查(之前检查 node_modules)。 p>

    如果您在自己的项目中对模块的所有require 调用都使用相对路径(例如require('./js/controllers/todoCtrl')),则您将不需要paths 配置选项。

    【讨论】:

    • 我现在其实有点迷茫。也许我应该回到绘图板上。有人可以向我解释entries 到底在做什么吗?它是在寻找要转换的 javascript 文件还是实际指定目标文件?
    • @Grateful entries 是 Browserify 在加载生成的脚本时将调用的文件。 paths 的目的完全不同。
    • @Grateful 是的。 entries 指定加载包时加载和调用的模块。这些模块可以require 其他模块,paths 选项与用于其他模块的解析机制有关。并非所有模块都需要指定为 entries - 可以这么说,只有引导应用程序的模块(或多个模块)。
    • @cartant 哦等等....我需要更好地理解这一点。你刚才说“并非所有模块都需要指定”...首先,我认为任何需要连接、丑化和捆绑的 javascript 文件(类或无类、模块或无模块、需要或否require) 应该在entries 中引用...所以您能否详细说明“模块”的含义,更具体地说是“仅引导应用程序的模块(或模块)”?
    • 如果启动应用程序的代码在模块a中,并且模块a需要模块b需要模块c,则只需指定模块a作为入口观点。 Browserify 将检查 require 依赖树并将所有依赖模块包含在包中。您不必全部指定它们,只需指定入口点 - 通常只有一个入口点(除非您正在捆绑测试,在这种情况下,每个测试通常也被添加为入口点)。
    【解决方案2】:

    好吧,一个简单的答案似乎是 **/* 不被 browserify 识别!您必须require("glob") 才能做到这一点...但使用paths 指定额外的文件夹可能更简单。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-14
      • 1970-01-01
      • 1970-01-01
      • 2015-04-15
      • 1970-01-01
      • 1970-01-01
      • 2014-10-24
      • 1970-01-01
      相关资源
      最近更新 更多