我有以下代码段,它在其上下文中有效。
"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中会发生什么?
答案 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');
有些人可能不喜欢它,因为您将污染全局名称空间。但是对于小型应用程序,您可以摆脱它。