2016-04-05 27 views
4

我有以下代碼片段,它在其上下文中工作。Node.js要求不將其存儲到變量中

"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');

爲什麼它的工作?

所需的鍍鉻汽車在哪裏最終?

如果require()函數不將其返回值保存到變量中,會發生什麼?

回答

8

在模塊上調用require實際上會執行模塊中的任何代碼。在大多數情況下,模塊會導出一個或多個函數或一個對象,您希望將其存儲在一個變量中。但是,如果你寫的東西,如:

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

,然後require,在一個節點的程序文件,你會得到100行添加到您的控制檯,並沒有別的發生。

+0

謝謝,我會試試你的例子來親眼看看。 – tool

11

require的基本功能是執行代碼寫入模塊。在最後,這個執行的代碼可能會或可能不會返回一些東西。在你的情況下,這段代碼返回的內容並不重要,重要的是這段代碼至少執行一次。

請注意,require的結果被緩存也很重要。這意味着即使您多次需要該模塊,「代碼」只會執行一次。

這整個範例的模塊和要求來自CommonJS模式,我建議你閱讀它。

+1

高速緩存的好處。 – Paul

+0

當使用require方法時,是否還有一種方法可以傳遞參數?例如,將一個變量傳遞給config中的代碼require(「dotenv」)。config() – slopeofhope

相關問題