<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                >[success] # Node 工程化 前端工程化是基于 Node.js,想對工程化有了解 需要了解 Node.js 部分知識 1. 什么是`Node.js`,是一個基于**V8 JavaScript引擎的JavaScript運行時環境**,**V8**可以嵌入到任何**C ++應用程序**,V8 只是作為執行 js的,**以瀏覽器為例** V8 只是瀏覽器構成一部分(**解析、渲染HTML、CSS等相關渲染引擎,另外還需要提供支持瀏覽器操作的API、瀏覽器自己的事件循環**),`Node.js` 中除了V8 (**文件系統讀/寫、網絡IO、加密、壓縮解壓文件**) 2. `Node.js`,編寫的JavaScript代碼會經過V8引擎,再通過Node.js的Bindings,將任務放到Libuv的事件循環中,libuv(**使用C語言編寫的庫**)提供了**事件循環、文件系統讀寫、網絡IO、線程池**等等內容 ![](https://img.kancloud.cn/36/1b/361b6bfcbb618c7d350c125a7085fe89_1170x421.png) >[danger] ##### 安裝 1. Node.js 在安裝時候有兩個版本 1.1. **LTS版本**:(Long-term support, 長期支持)相對穩定一些,推薦線上環境使用該版本; 1.2. **Current版本**:最新的Node版本,包含很多新特性 2. 不同環境安裝`Node.js` 也不同方式,**Mac上的homebrew,Linux上的yum、dnf**等,也可以自己下載安裝包**window選擇.msi安裝包,Mac選擇.pkg安裝包** >[danger] ##### 多版本管理工具 1. 用來切換電腦上node 版本工具有兩個,**nvm:Node Version Manager**,**n:Interactively Manage Your Node.js Versions**,這兩種都不能在Window 上使用 2. **Window 需要使用nvm**,在GitHub上有提供對應的window版本:https://github.com/coreybutler/nvm-windows , 直接下載安裝即可 >[danger] ##### 使用 nvm 1. **nvm list** 查看當前安裝的Node.js所有版本 2. **nvm install 版本號** 安裝指定版本的Node.js (**nvm install latest** 安裝最新的node版本) 3. **nvm uninstall 版本號** 卸載指定版本的Node.js 4. **nvm use 版本號** 選擇指定版本的Node.js >[danger] ##### 使用 n 1. 通過 npm 安裝 n 管理參考 https://github.com/tj/n ,`npm install -g n` 2. **n lts** 安裝最新的lts 版本 3. **n latest** 安裝最新版本 4. **n** 查看版本 >[danger] ##### 想更新node 版本 1. 這里接受的是win 更新方式,輸入where node 看一下node 安裝的盤符,在node 官網下載一個新的版本包,然后安裝剛才查看的盤符 2. Linux 只是使用 n 更新即可 >[danger] ##### Node 的 REPL 1. REPL是**Read-Eval-Print Loop的簡稱,翻譯為“讀取-求值-輸出”循環**,**是一個簡單的、交互式的編程環境** ,你可以直接在控制進行代碼演練 ![](https://img.kancloud.cn/33/d0/33d029fb06e4f187bd4ed44b50729c7a_1200x628.png) >[info] ## Node 中全局對象 1. **global是一個全局對象,類似于瀏覽器中的window**,在新的標準中瀏覽器和 Node 都可以使用**globalThis**,也是全局對象的 2. 和瀏覽器不同點,**node中,我們通過var定義一個變量,它只是在當前模塊中有一個變量,不會放到全局中**,**但是在瀏覽器中執行的JavaScript代碼,如果我們在頂級范圍內通過var定義的一個屬性,默認會被添加到window對象上** ~~~ // 在node 環境下執行 var a = 1 console.log(global.a) // undefined ~~~ 3. **__dirname、__filename、exports、module、require()**,這些全局對象實際上是模塊中的變量,**只是每個模塊都有**,看來像是全局變量,在命令行交互中是不可以使用的 ![](https://img.kancloud.cn/37/0e/370e112b31758ab1b58cd18805ce0126_448x737.png) >[danger] ##### 在工程化中會用到的 1. **__dirname**:獲取當前文件所在的路徑(不包括后面的文件名) 2. **__filename**:獲取當前文件所在的路徑和文件名稱(包括后面的文件名稱) 3. **process對象**:process提供了Node進程中相關的信息.可以獲取Node的運行環境、參數信息等 3.1. **process.argv** : 接受命令行參數,執行node 使用腳本 `node xx.js`,下**執行node程序的過程中,我們可能希望給node傳遞一些參數** `node xx.js xx1 xx2`,可以使用 **process.argv** ,得到一個數組,前兩項數據分別是:Node.js環境的路徑;當前執行的js文件的全路徑,從第三個參數開始表示命令行參數 ~~~ console.log(process.argv) ~~~ ![](https://img.kancloud.cn/9e/fc/9efc8c849247a00cdf17cd17cfb56b57_417x133.png) >[info] ## 內置模塊path 1. 在不同 系統上路徑系統是不同,**window**上會使用` \`或者 `\\ `來作為文件路徑的分隔符,當然目前也支持 `/`,在**Mac OS、Linux**的Unix操作系統上使用` /` 來作為文件路徑的分隔符,因此在不同系統中路徑符不同,需要操作我們可以使用 **path** 模塊 >[danger] ##### 獲取路徑一些信息api 1. **dirname**:獲取文件的父文件夾; 2. **basename**:獲取文件名; 3. **extname**:獲取文件擴展名; ~~~ console.log(path.extname(filepath)) // .txt console.log(path.basename(filepath)) // nba.txt console.log(path.basename(filepath, '.txt')) // nba //只要名稱不要后綴 console.log(path.dirname(filepath)) // C://abc/cba ~~~ >[danger] ##### 路徑拼接 -- join 1. 用于連接路徑**從左到右進行處理**,拼接后生成的是**相對路徑**。該方法的主要用途在于,會正確使用當前系統的路徑分隔符,**Unix系統是"/",Windows系統是"\"**。下面案例 window 打印結果 `\abc\cba\123.txt`,Unix系統是`/abc/cba/123.txt` ~~~ const path1 = '/abc/cba' const path2 = '123.txt' console.log(path.join(path1, path2)) ~~~ 2. join 尾部的斜杠**不會被刪除**,會把全部給定的 path 片段連接到一起,并規范化生成的路徑,下面案例中拼接重疊的路徑最后打印只有一個。但末尾的還存在 ~~~ const path1 = '/abc/cba/' const path2 = '/123' const path3 = '/456/' console.log(path.join(path1, path2, path3)) // \abc\cba\123\456\ ~~~ 3. 長度為零的 path 片段會被忽略 ~~~ path.join('/目錄1', '', '目錄3'); // \目錄1\目錄3 ~~~ 4. 如果連接后的路徑字符串為長度為零的字符串,則返回 ‘.’,表示當前工作目錄 ~~~ path.join('', '', ''); // . ~~~ >[danger] ##### 拼接絕對路徑 -- path.resolve() 1. `path.resolve()` 方法路徑的序列是從右往左被處理的會把一個路徑或路徑片段的序列解析為一個**絕對路徑**;如果沒有path傳遞段,path.resolve()將返回當前工作目錄的絕對路徑 ~~~ const path = require('path') console.log(path.resolve('./abc/cba', '../zz/bb', './abc.txt')) // d:\lzz\abc\zz\bb\abc.txt console.log(path.resolve()) // d:\lzz ~~~ 2. 生成的路徑被規范化并刪除尾部斜杠,零長度path段被忽略 ~~~ const path = require('path') console.log(path.resolve('./abc/cba', '../zz/bb', './abc.txt/')) // d:\lzz\abc\zz\bb\abc.txt ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看