Node.js需要而不将其存储到变量

时间:2016-04-05 12:46:13

标签: javascript node.js require selenium-chromedriver

我有以下代码段,它在其上下文中有效。

"use strict"; 
require('chromedriver');
var selenium = require('selenium-webdriver');
var driver = new selenium.Builder()
  .forBrowser('chrome')
  .build();

我不明白的是这句话:

require('chromedriver');

如果我将其删除,则会收到错误消息:

Error: The ChromeDriver could not be found on the current PATH. Please download the latest version of the ChromeDriver from http://chromedriver.storage.googleapis.com/index.html and ensure it can be found on your PATH.

所以它有所作为。

我理解var chromedriver = require('chromedriver');做了什么,我到目前为止只看到过以这种方式使用的require函数。

所以关于这一行的问题:require('chromedriver');

为什么会这样?

所需的chromedriver最终会在哪里?

如果require()函数没有将其返回保存到变量中,那么在genereal中会发生什么?

3 个答案:

答案 0 :(得分:13)

require的基本功能是它执行模块中编写的代码。最后,这个执行的代码可能会或可能不会返回一些东西。在您的情况下,此代码返回的内容并不重要,更重要的是此代码至少执行一次。

同样重要的是要注意require的结果是高速缓存的。这意味着即使您需要该模块多次"代码"只执行一次。

这个模块和需求的整个范例来自CommonJS模式,我建议你阅读它。

答案 1 :(得分:9)

调用模块上的require实际执行模块中的任何代码。在大多数情况下,模块会导出一个或多个函数或一个对象,您希望将其存储在变量中。但是如果你要写一些类似的东西:

for (var i = 0;i < 100; i++){
   console.log("I've been called %d times", i);
}

在.js文件中,然后require该节点程序中的文件,您将获得100行添加到您的控制台,没有其他任何事情发生。

答案 2 :(得分:1)

该模块可能不会导出任何内容,但是可能会将某些内容分配给global

例如,在helper.js

global.timeout = 5000;

global.sayHello = function(e) {
    console.log('Hello',e);
}

main.js

require('./helper.js');

sayHello('fish');

有些人可能不喜欢它,因为您将污染全局名称空间。但是对于小型应用程序,您可以摆脱它。