在node.js中,模塊使用CommonJS規范,一個文件是一個模塊
node.js中的模塊可分為三類
node.js提供了大量的模塊供我們使用,比如 想解析一個文件的路徑,可以使用path模塊下的相應方法實現:
const path = require('path');//返回目標文件的絕對路徑console.log(path.resolve('./1.txt'));運行結果:
/Users/cuiyue/workspace/test/1.txt
使用require引入相應的模塊,即可使用。
__dirname和__filename
node.js的每個模塊都有這兩個參數,它們都是一個絕對路徑的地址,區別是__filename存放了從根目錄到當前文件名的路徑,__dirname只存放從根目錄到模塊的所在目錄:
console.log(__dirname);console.log(__filename);
運行結果:
/Users/cuiyue/workspace/test
/Users/cuiyue/workspace/test/module.js
vm模塊
vm模塊是node.js提供在V8虛擬機中編譯和運行的工具,node.js中的模塊內部實現就是通過此模塊完成。
說說vm的基本用法。
在js環境中有一個eval函數,它可以運行js的代碼字符串,比如:
eval('console.log("Hello javascript.")'); //輸出Hello javascript.可以看到,eval函數的參數是一段字符串,它可以運行字符串形式的js代碼,但它可以使用上下文環境中的變量:
var num=100;eval('console.log(num)'); //輸出100以上是可以正確訪問num的值。
vm模塊提供了方法創建一個安全的沙箱,在指定的上下文環境中運行代碼,不受外界干擾。
const vm = require('vm');var num = 100;vm.runInThisContext('console.log(num)');運行結果:
console.log(num)
^
ReferenceError: num is not defined
可以看到代碼報錯了,說明在vm創建了指定的上下文環境中,拿不到外界的參量。
CommonJS規范
在以前,由于javascript的歷史原因導致它的模塊機制很差,由于這些缺點使得javascript不太善于開發大型應用,于是提出了CommonJS規范以彌補javascript的不足。
CommonJS規范主要分為三塊內容:模塊導入導出、模塊定義、模塊標識。
模塊導入導出
CommonJS中使用require()函數進行模塊的引入。
const mymodule = require('mymodule');使用exports導出模塊
module.exports = {  name: 'Tom'};引用的名稱可以不帶路徑,若不帶路徑表示引入的是node提供的模塊或是npm安裝的第三方模塊(node_modules)
新聞熱點
疑難解答
圖片精選