【问题标题】:Grunt Browserify - set include, fallback pathGrunt Browserify - 设置包含,后备路径
【发布时间】:2015-01-26 09:43:43
【问题描述】:

有没有办法为 Browserify 创建 Grunt 任务以使用 fallback 路径? 例如。

require('./module.js)

检查module.js是否在当前目录,如果不在,检查其他目录?

    project1
     |- dir1
         |- mod1.js - has: require('./mod2.js')
         |- bundle.js - has: require('./mod1.js') and require('./mod2.js')
    project2
     |- dir2
         |- mod1.js 
         |- mod2.js

我已经尝试过remapify,但它只能检查一个特定的目录。 而且我不想更改模块内的 require 路径,一切都应该通过 Grunt 完成。

我想覆盖一些应用程序 (dir2),所以我想只获取(复制到 dir1)我需要更改的模块,并将所有其他模块留在应用程序目录中。

Gruntfile 位于project1。模块是 CommonJS。我正在使用 grunt-browserify

【问题讨论】:

    标签: javascript node.js gruntjs browserify commonjs


    【解决方案1】:

    我知道这已经有点老了,但最好有答案。

    所以,几天前我问了自己一个非常相似的问题,最后基本上做了你想做的事。

    使用来自 grunt-browserify 的browserifyOptions,例如:

    // Using grunt-browserify
    grunt.loadNpmTasks("grunt-browserify");
    
    grunt.initConfig({
      browserify : {
        options : {
          browserifyOptions : {
            // keep in mind that paths are relative to Gruntfile.js
            paths: ["./first/path", "./second/path", "./and/so/on"]
          }
        },
        dist : {
          files: { "./path/to/dist.js" : "./path/to/src.js" }
        }
      },
    });
    

    你现在可以这样做了:

    var myModule = require("myModule"); 
    

    opts.paths 是 browserify 搜索的目录数组 查找未使用相对路径引用的模块。能 绝对或相对于 basedir。等效于设置 NODE_PATH 调用 browserify 命令时的环境变量。 - Browserify

    理论上,它应该按顺序遵循路径,我遇到的唯一问题是它在搜索这些路径之前会先查看本机节点模块(util、fs 等)。

    这句话的意思是,如果你这样做:

    var myModule = require("./myModule"); 
    

    Browserify 将在相对路径之后查找模块。当您删除相对路径时:

    var myModule = require("myModule");
    

    它可以在选项中搜索已建立的路径。

    编辑

    我对此进行了测试,它按预期工作。我有一个名为 myModule.js 的模块,位于“./current/directory”中,我还有一个名为 myModule.js 的模块,位于“./modules/directory”中。另外,在当前目录中,我有需要模块的“src.js”:require("myModule");。它通过路径按顺序查找,在这种情况下,第一个找到的是注入bundle.js 的路径。

    grunt.initConfig({
      browserify : {
    
        dist : {
          options : {
            browserifyOptions : {
              // keep in mind that paths are relative to Gruntfile.js
              paths: ["./current/directory", "./modules/directory"]
            }
          },
          files: { "./current/directory/bundle.js" : "./current/directory/src.js" }
        }
      },
    });
    

    【讨论】:

      猜你喜欢
      • 2014-03-06
      • 2010-12-09
      • 2014-03-03
      • 2019-07-25
      • 2017-08-02
      • 2013-06-06
      • 2016-04-21
      • 2013-05-20
      • 1970-01-01
      相关资源
      最近更新 更多