日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

四、模块系统

發布時間:2024/7/5 windows 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 四、模块系统 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

什么是模塊化

  • 文件作用域(模塊是獨立的,在不同的文件使用必須要重新引用)【在node中沒有全局作用域,它是文件模塊作用域】
  • 通信規則
    • 加載require
    • 導出exports

CommonJS模塊規范

在Node中的JavaScript還有一個重要的概念,模塊系統。

  • 模塊作用域

  • 使用require方法來加載模塊

  • 使用exports接口對象來導出模板中的成員

    加載require

    語法:

    var 自定義變量名 = require('模塊')

    作用:

    • 執行被加載模塊中的代碼
    • 得到被加載模塊中的exports導出接口對象

    導出exports

    • Node中是模塊作用域,默認文件中所有的成員只在當前模塊有效

    • 對于希望可以被其他模塊訪問到的成員,我們需要把這些公開的成員都掛載到exports接口對象中就可以了

      導出多個成員(必須在對象中):

      exports.a = 123; exports.b = function(){console.log('bbb') }; exports.c = {foo:"bar" }; exports.d = 'hello';

      導出單個成員(拿到的就是函數,字符串):

      module.exports = 'hello';

      以下情況會覆蓋:

      module.exports = 'hello'; //后者會覆蓋前者 module.exports = function add(x,y) {return x+y; }

      也可以通過以下方法來導出多個成員:

      module.exports = {foo = 'hello',add:function(){return x+y;} };

模塊原理

exports和module.exports的一個引用:

console.log(exports === module.exports); //trueexports.foo = 'bar';//等價于 module.exports.foo = 'bar';

當給exports重新賦值后,exports!= module.exports.

最終return的是module.exports,無論exports中的成員是什么都沒用。

真正去使用的時候:導出單個成員:exports.xxx = xxx;導出多個成員:module.exports 或者 modeule.exports = {}; 1.jQuery中的each 和 原生JavaScript方法forEach的區別:提供源頭:原生js是es5提供的(不兼容IE8,jQuery的each是jQuery第三方庫提供的(如果要使用需要用2以下的版本也就是1.版本),它的each方法主要用來遍歷jQuery實例對象(偽數組),同時也可以做低版本forEach的替代品,jQuery的實例對象不能使用forEach方法,如果想要使用必須轉為數組([].slice.call(jQuery實例對象))才能使用 2.模塊中導出多個成員和導出單個成員 3.301302的區別:301永久重定向,瀏覽器會記住302臨時重定向 4.exports和module.exports的區別:每個模塊中都有一個module對象module對象中有一個exports對象我們可以把需要導出的成員都掛載到module.exports接口對象中也就是`module.exports.xxx = xxx`的方式但是每次寫太多了就很麻煩,所以Node為了簡化代碼,就在每一個模塊中都提供了一個成員叫`exports``exports === module.exports`結果為true,所以完全可以`exports.xxx = xxx`當一個模塊需要導出單個成員的時候必須使用`module.exports = xxx`的方式,=,使用`exports = xxx`不管用,因為每個模塊最終return的是module.exports,而exports只是module.exports的一個引用,所以`exports`即使重新賦值,也不會影響`module.exports`。有一種賦值方式比較特殊:`exports = module.exports`這個用來新建立引用關系的。

require的加載規則

  • 核心模塊

    • 模塊名
  • 第三方模塊

    • 模塊名
  • 用戶自己寫的

    • 路徑

require的加載規則:

  • 優先從緩存加載

  • 判斷模塊標識符

    • 核心模塊
    • 自己寫的模塊(路徑形式的模塊)
    • 第三方模塊(node_modules)
      • 第三方模塊的標識就是第三方模塊的名稱(不可能有第三方模塊和核心模塊的名字一致)
      • npm
        • 開發人員可以把寫好的框架庫發布到npm上
        • 使用者通過npm命令來下載
      • 使用方式:var 名稱 = require('npm install【下載包】 的包名')
        • node_modules/express/package.json main
        • 如果package.json或者main不成立,則查找被選擇項:index.js
        • 如果以上條件都不滿足,則繼續進入上一級目錄中的node_modules按照上面的規則依次查找,直到當前文件所屬此盤根目錄都找不到最后報錯
// 如果非路徑形式的標識 // 路徑形式的標識:// ./ 當前目錄 不可省略// ../ 上一級目錄 不可省略// /xxx也就是D:/xxx// 帶有絕對路徑幾乎不用(D:/a/foo.js) // 首位表示的是當前文件模塊所屬磁盤根目錄 // require('./a'); // 核心模塊 // 核心模塊本質也是文件,核心模塊文件已經被編譯到了二進制文件中了,我們只需要按照名字來加載就可以了 require('fs'); // 第三方模塊 // 凡是第三方模塊都必須通過npm下載(npm i node_modules),使用的時候就可以通過require('包名')來加載才可以使用 // 第三方包的名字不可能和核心模塊的名字是一樣的 // 既不是核心模塊,也不是路徑形式的模塊 // 先找到當前文所述目錄的node_modules // 然后找node_modules/art-template目錄 // node_modules/art-template/package.json // node_modules/art-template/package.json中的main屬性 // main屬性記錄了art-template的入口模塊 // 然后加載使用這個第三方包 // 實際上最終加載的還是文件// 如果package.json不存在或者mian指定的入口模塊不存在 // 則node會自動找該目錄下的index.js // 也就是說index.js是一個備選項,如果main沒有指定,則加載index.js文件 // // 如果條件都不滿足則會進入上一級目錄進行查找 // 注意:一個項目只有一個node_modules,放在項目根目錄中,子目錄可以直接調用根目錄的文件 var template = require('art-template');

總結

以上是生活随笔為你收集整理的四、模块系统的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。