運行nodenode
//模塊就是爲了不全局污染,變量名衝突什麼的 //Node.js 有一個簡單的模塊加載系統,遵循的是 CommonJS 的規範。 //在 Node.js 中,文件和模塊是一一對應的(每一個文件被視爲一個獨立的模塊)。 // 一切皆模塊
// nodejs 會自動給咱們的js文件添加頭部, (function(exports, require, module, __filename, __dirname) { // 這裏是你本身寫的js代碼文件 }); // 自定添加上尾部 //咱們本身js就寫在這個函數裏面 ,而後你就能夠用這些參數 //因此 你能夠直接這樣輸出
console.log(__dirname); //E:\HB\nodejs 絕對路徑 console.log(__filename); //E:\HB\nodejs\test.js 絕對路徑+本身的名字+後綴名 console.log(exports); // {} 返回一個對象 //exports 不是 module的屬性exports module.exports和exports不同 console.log(require); //是一個函數,幫助引入其餘模塊.
console.log(module)npm
module的屬性 類型 屬性說明 module.filename string 模塊的徹底解析後的文件名 module.id string 模塊的標識符。 一般是徹底解析後的文件名。 module.loaded boolean 模塊是否已經加載完成,或正在加載 module.parent object 最早引用該模塊的模塊。 module.paths string 模塊的搜索路徑。 module.children object 被該模塊引用的模塊對象。
exportsjson
exports.a="123"; console.log(module); // Module {exports: { a: '123' },}
exports={ a:"456", }; console.log(module); // Module {exports: {},}
module.exports.b="555"; console.log(module); // Module {{ b: '555' },}
module.exports={ b:"555", }; console.log(module); // Module {{ b: '555' },}
// module.exports和exports的區別 module.exports纔是真正對外拋出對象的傢伙 //exports 的來歷(NodeJS在你的代碼中加了如下代碼:) var module = new Module(); var exports = module.exports; exports與module.exports的關係 //exports = module.exports = {}; //而上面的代碼中 exports={a:"456"} 賦值一個新對象 致使 module.exports沒有賦值給exports
require函數
// require接受一個參數(路徑或文件名,也就是module.id string 模塊的標識符。 一般是徹底解析後的文件名。),類型是String。 // equire函數return的是module.exports對象,裏面類型是任意的。 /*test.js中 test.js與test_a.js同級 */ var kk= require("./test_a.js"); console.log(kk.a); //123 kk.b(); //456 /*test_a.js中*/ module.exports={ a:"123", b:function(){ console.log("456"); } }
/*test.js中 test.js與test_b.js同級 */ require("./test_b.js"); //666 導入js 直接運行 /*test_b.js中*/ console.log("666"); //require函數能夠導入模塊、JSON文件、本地文件。
//node.js模塊分類 // 核心模塊Code Module、內置模塊、原生模塊 //fs http path url.. //第三方模塊 通常就是 npm install 下載的那些 //自定義模塊 本身寫的模塊 //加載順序 // require('./index2') //在加載index2的時候,require會先去找index2.js文件,沒有就去找.json文件,再沒有就找node文件 //若是這些都沒有,它會認爲index2是一個文件夾,若是找到了這個文件夾, //require還會去找這個文件夾裏面是否有package.json,若是沒有就加載失敗, //若是有,就找package.json裏的main(),就加載main裏面的index.js/index.json/index.node,若是沒有,也是失敗。 //檢查index2目錄是否包含一個index.js文件。 這個文件會被隱式地看成那個文件夾下的"main"模塊。 //var x = require("moduleB"); Node則會如下面的順序去解析 moduleB,直到有一個匹配上。 /root/src/node_modules/moduleB.js /root/src/node_modules/moduleB/package.json (若是指定了"main"屬性) /root/src/node_modules/moduleB/index.js /root/node_modules/moduleB.js /root/node_modules/moduleB/package.json (若是指定了"main"屬性) /root/node_modules/moduleB/index.js /node_modules/moduleB.js /node_modules/moduleB/package.json (若是指定了"main"屬性) /node_modules/moduleB/index.js 注意Node.js在步驟(4)和(7)會向上跳一級目錄。