browserify external与exclude有什么区别?

时间:2015-09-23 18:04:46

标签: node.js browserify

我正在使用for ( ;; ) { char input[SIZE]; // for some reasonable SIZE value, at least 12 to handle // a 32-bit int (up to 10 digits plus sign plus // string terminator printf("What is %d %c %d ? ", n1, op, n2); if ( fgets( input, sizeof input, stdin ) ) { char *check; // will point to first non-digit character in input buffer int tmp = (int) strtol( input, &check, 10 ); if ( isspace( *check ) || *check == 0 ) { user_answer = tmp; break; } else { fprintf( stderr, "%s is not a valid input, try again\n", input ); } } else { /** * error or EOF on input, treat this as a fatal error and bail */ fprintf( stderr, "EOF or error while reading input, exiting...\n" ); exit( 0 ); } } 并尝试让它跳过浪费时间,包括或解析jquery和其他c = scanf("%d", &user_answer); - 我通过CDN加载的文件较少。

我应该使用browserify还是require?有什么不同?他们的输出似乎完全相同,而且我不清楚这些文档:

  

防止将文件加载到当前包中   引用另一个包。

     

如果file是一个数组,文件中的每个项目都将被外部化。

     

如果file是另一个bundle,那么将读取该bundle的内容   当文件包捆绑在一起时,从当前包中排除。

  

防止文件中的模块名称或文件显示在输出中   束。

     

如果您的代码尝试require()该文件,它将抛出,除非您已经   提供了另一种加载它的机制。

2 个答案:

答案 0 :(得分:5)

答案:

您应该使用exclude

说明:

这两个函数都会阻止文件包含在捆绑包中。对于您的用例,您可能不会使用require jQuery,因此您使用它并不重要。但是,这就是:#/ p>

browserify使用module-deps来探索您的代码并查找任何require语句,然后告诉module-deps在哪里找到所需的模块。

如果文件在捆绑包中,则只需在捆绑包的模块映射中为其提供密钥。

如果您说该文件是external,则browserify会假定您将其包含在另一个捆绑包中,因此提供该文件的路径,假设该ID作为ID将从其他捆绑包中解析。为了能够做到这一点,还需要一些额外的簿记。

如果您exclude该文件,则browserify将向模块提供undefined,当您尝试使用需要该文件的包时,肯定会有火。但是,这种方法缺乏跟踪文件路径的开销(这实际上可以忽略不计),并且没有浪费时间"在爆炸之前查看其他捆绑包。

一些例子: 我摆弄了node-browserify / example / api以生成一些包,下面的例子是来自各种测试的模块映射,为了便于阅读而进行了格式化。

Vanilla - 在浏览器回购中运行:

{
    1: [function(require, module, exports) {
        module.exports = function(n) {
            return n * 3 };

    }, {}],
    2: [function(require, module, exports) {
        var bar = require('./bar');

        module.exports = function(n) {
            return n * bar(n);
        };

    }, { "./bar": 1 }],
    3: [function(require, module, exports) {
        var foo = require('./foo');
        console.log(foo(5));

    }, { "./foo": 2 }]
}

3(main.js)取决于./foo

2

2(foo.js)取决于./bar

1

1(bar.js)没有依赖

api/bar.js标记为外部:

{
    1: [function(require, module, exports) {
        var bar = require('./bar');

        module.exports = function(n) {
            return n * bar(n);
        };

    }, { "./bar": "/browser/bar.js" }],
    2: [function(require, module, exports) {
        var foo = require('./foo');
        console.log(foo(5));

    }, { "./foo": 1 }]
}

2(main.js)取决于./foo

1

1(foo.js)取决于./bar,在其他捆绑包中应标记为/browser/bar.js

标记为api/bar.js以排除:

{
    1: [function(require, module, exports) {
        var bar = require('./bar');

        module.exports = function(n) {
            return n * bar(n);
        };

    }, { "./bar": undefined }],
    2: [function(require, module, exports) {
        var foo = require('./foo');
        console.log(foo(5));

    }, { "./foo": 1 }]
}

2(main.js)取决于./foo

1

1(foo.js)取决于ZOMFG的./bar!我不知道它在哪里。你需要??!1!

删除了排除/外部电话,并从./bar移除了foo.js的要求:

{
    1: [function(require, module, exports) {
        module.exports = function(n) {
            return n * bar(n);
        };

    }, {}],
    2: [function(require, module, exports) {
        var foo = require('./foo');
        console.log(foo(5));

    }, { "./foo": 1 }]
}

2(main.js)取决于./foo

1

1(foo.js)没有依赖关系,世界是桃子。我想知道他们是否通过其他方式加载bar

答案 1 :(得分:0)

@ Will的答案的第一部分也很重要:

  

对于您的用例,您可能不会要求使用jQuery,因此使用它并不重要

我认为OP的例子令人困惑,要求排除与外部之间的区别。如果jQuery永远不会在代码中被要求() - 那么就没有问题:它将永远不会被browserify解析,并且必须通过其他方式加载。

我只是想指出这一点,因为我发现这也令人困惑。