簡體   English   中英

Node.js需要不將其存儲到變量中

[英]Node.js require without storing it into a variable

我有以下代碼片段,它在其上下文中工作。

"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中會發生什么?

基本的require是它執行模塊中編寫的代碼。 最后,這個執行的代碼可能會或可能不會返回一些東西。 在您的情況下,此代碼返回的內容無關緊要,重要的是此代碼至少執行一次。

同樣重要的是要注意require的結果是緩存的。 這意味着即使您多次要求該模塊,“代碼”也只執行一次。

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

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

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

在.js文件中,然后在節點程序中require該文件,您將獲得100行添加到您的控制台,沒有其他任何事情發生。

該模塊可能不會導出任何內容,但它可能會將一些內容分配給global

例如,在helper.js

global.timeout = 5000;

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

並在main.js

require('./helper.js');

sayHello('fish');

有些人可能不喜歡它,因為你將污染全局命名空間。 但對於小型應用程序,您可以逃脫它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM