『壹』 webpack nodejs npm關系
nodejs是js後端運行平台,可以把它看成java體系中對應的jdk,是三個裡面最基礎的。
npm是nodejs的包管理工具,可以把它看成maven中包依賴管理那部分。
webpack是前端工程化打包工具,可以把它看成maven中工程自動化那部分
提問:
1.webpack安裝一般使用npm,那麼也需要安裝node,而後台不想用nodeJs編寫,這樣是不是多餘,畢竟不用nodeJs,為什麼要因為使用webpage而被動安裝node呢?(請原諒我對這方面知識的欠缺= =)
2.不僅是vue.js使用npm,很多好的框架和工具都使用,這里還請大神告訴我npm、node、nodejs他們之間的關系,好混亂啊。。
問題一:
使用webpack跟後台是否用nodejs無關,因為webpack在執行打包壓縮的時候是依賴nodejs的,沒有nodejs就不能使用webpack就好比你要使用電燈,首先必須得有電流,而電流是需要發動磨埋機來發電的,你不能因為御游桐說我不要發動機而直接使用電流吧~
問題二:
node和nodejs就是同一個東西,只是名字鎮坦不同而已,而npm只是nodejs的一個模塊
webpack是基於nodejs實現的, Node.js 是前端工程化的重要支柱之一
webpack打包後的web工程,不需要一定在nodejs環境中運行 比如在apache中也可以運行
『貳』 使用Node中的Buffer模塊,將圖片轉換成base64編碼
Buffer官方文檔如下 http://nodejs.cn/api/buffer.html
node開發過程中,常用的就是將圖片轉換成base64編碼,這時候就用到buffer了:
運行
將列印出來的結果輸入到test.js這個文件里,便於查看。之後我們在test.js里就能看到這個圖片的base64編碼了。
再設置好其 DataURI前綴 就能在瀏覽器里查看這張圖片啦!
下面是我在瀏覽器查看的結果:
『叄』 Node.js的Buffer與字元編碼及轉換
Buffer實例一般用於表示編碼字元的序列,如UTF-8、UCS2、Base64或十六進制編碼的數據。通過使用顯式的字元編碼就可以在Buffer實例與普通的JavaScript字元串之間進行相互轉換。
Node.js目前支持的字元編碼包括:
● ascii:僅支持7位ASCII數據。如果設置去掉高位的話,那麼這耐尺絕種編碼是非常快的。
● utf8:多位元組編碼的Unicode字元。許多網頁和其他文檔格式都使用UTF-8。
● utf16le:2或4個位元組,小端序編碼的Unicode字元,支持代理對(U+10000 ~ U+10FFFF)。
● ucs2:utf16le的別名。
● base64:Base64編碼。
● latin1:一種把Buffer編碼成一位元組編碼的字元困謹串的方式。
● binary:latin1的別名。
● hex:將每個位元組編碼為兩個十六進制字元昌姿。
『肆』 Node.js的Buffer寫入
Buffer寫入的語法如下:
buf.write(string[,offset[,length]][,encoding])
即根據encoding的字元編碼寫入string到buf中返敗的offset位置。length參數是寫入的位元組數。如果buf沒有足夠的空間保存整個字元串,就只會寫入string的一部分。只部分解碼的字元不會被寫入。該方法返回實際寫入的大小。參數含義如下:
● String:寫入的字元串。
旅或 ● Offset:開始寫入的索引值,默漏鎮顫認為0。
● Length:寫入的位元組數,默認為buffer.length。
● Encoding:使用的編碼,默認為"utf8"。
『伍』 nodejsdel模塊的作用
在nodejs中,模塊是用於使用一些指定功能的js文件,通過以模塊為單位來劃分所有的功能,每一個模塊中定義的全局變數和函數的作用范圍也被蔽蔽限定在這個模塊之內;包是用於管理模塊以及其依賴關系的,可以對多個模塊進行封裝。
本文操作環境:Windows10系統、nodejs 12.19.0版、Dell G3電腦。
nodejs模塊與包是干什麼的
區分一下包與模塊:合理的使用包和模塊,會使你的程序變得低冗餘,高可讀,功能全面。
一、NodeJS中包
包用於管理多個模塊及其依賴關系,可以對多個模塊進行封裝,包的根目錄必須包含 package.json 文件。
符合 CommonJS 規范的 package.json 文件一般包含以下欄位:
name:包名。包名是唯一的,只能包含小寫字母、數字和下劃線。
version:包版本號。
description:包說明。
keywords:關鍵字數組,用於搜索。
homepage:項目主頁。
bugs:提交 bug 的地址。
license:許可證。
maintainers:維護者數組。
contributors:貢獻者數組。
repositories:項目倉庫託管地址數組。
dependencies:包依賴。
1.1 生成package.json文件
package.json 文件可以自己手動編輯,還可以通過 npm init 命令進行生成。
在終端中輸入 npm init 命令來生成一個包含 package.json 文件的包。直接輸入 npm init --yes 跳過回答問題步驟,直接生成默認值的 package.json 文件。
1.2 包操作
通過命令 npm install xxx 來安裝包。比如:
安裝包:
npm install express
更新包:
npm update express
刪除包:
npm uninstall express
在 npm 社區中去查找包,再通過命令 npm install 模塊名字 就可以安裝。每個模塊的名字全球唯一。
二、NodeJS中模塊
2.1 什麼是模塊
我們需要對比一下瀏覽器中的JS與Node.js中的JS:
在 JavaScript 中,我們通常把 JavaScript 代碼分為幾個 js 文件,然後在瀏覽器中將這些 js 文件合並運行。
Node.js 中,是通過以模塊為單位來劃分所有功能的。每一個模塊為一個 js 文件,每信並攔一個模塊中定義的全局變數和函數的作用范圍也被限定在這個模塊之內,只有使用 exports 對象才能傳遞到外部使用。
Node.js 官方提供了很多模塊,這些模塊分別實現了一種功能,如操作文件及文件系統的模塊 fs,構建 http 服務的模塊 http,處理文件路徑的模塊 path 等。
2.2 模塊的創建
我們創建一個模塊,並使用mole.exports進行導出。
myMole.js文件
function foo() {
console.log("hello syl");}mole.exports.foo = foo;
index.js文件
var hello = require("./myMole.js");hello.foo();
nodejs模塊與包有什麼作用
注意:核心模塊定義在 Node.js 源代碼的 lib/ 目錄下。require() 總是會優先加滑胡載核心模塊。
例如:require(『http』) 始終返回內置的 HTTP 模塊,即使有同名文件。
2.3 區分 mole.exports 和 exports
Node.js 為了簡化你的操作,專門提供了一個變數:exports 等於 mole.exports。
這兩行代碼效果是一樣的:
mole.exports.foo = foo;exports.foo = foo;
解釋案例:
// mole.jsconsole.log('mole', mole)console.log('mole.exports', mole.exports)console.log('exports', exports)console.log(mole.exports === exports);console.log("=========================================");exports = {
a: 3,
};console.log(exports);console.log(mole.exports);console.log(exports === mole.exports);
nodejs模塊與包有什麼作用
require() 得到的是 mole.exports 導出的值,導出多個成員可以用 mole.exports 和 exports,導出單個成員只能用 mole.exports。
以上就是「nodejs模塊與包有什麼作用」這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速雲行業資訊頻道。
『陸』 前端另一個運行環境NodeJS
說前端,就不得不說JavaScript,JavaScript可以直接在瀏覽器中運行,它的另一個運行環境就是NodeJs。
瀏覽器中寫JavaScript是超級簡單的,打開瀏覽器,然後按F12或者滑鼠右鍵氏兄做,選擇檢查(檢查元素),再選擇控制台,輸入Console.log(『Hello world!』),列印出經典的Hello World!。
讓javaScript這門語言能成為前端的老大,是應為NodeJs,有了NodeJs,javaScript也可以做為服務端部署,是不是感覺前端也能往全棧發展,開發出屬於自己的應用,不要太開心了哦。
現在開始安裝NodeJs啦,推薦菜鳥教程: https://www.runoob.com/nodejs/nodejs-install-setup.html以及NodeJs 官網: https://nodejs.org/en/download/
在這里注意說一下注意事項:
1. 確定安裝好node(npm隨node安裝程序自動安裝,npm是對Node.js依賴的包進行管理)之後
2. 配置npm安裝全局模塊時的路徑和緩存cache的路徑
Npm執行全局安裝的命令:npm install webpack -g等,默認會將模塊安裝在C:\Users\用戶名\AppData\Roaming路徑下的npm和npm_cache,這樣就會導致不方便管理此處的模塊並且佔用C盤空間,這里建議進行自定殲衡義的全局模塊安裝目錄的配置,在node.js安裝目錄下新建兩個文件夾node_global和node_cache:
在cmd中執行下面兩個命令即可:
npm config setprefix "D:\Program Files\nodejs\node_global"
npm config setcache "D:\Program Files\nodejs\node_cache"
執行之後,配置環境變數,如下:
「環境變塵慧量」-> 「系統變數」:新建一個變數名為「NODE_PATH」,值為:node安裝目錄\node_global\node_moles
「環境變數」 -> 「用戶變數」:編輯用戶變數里的Path,講相應npm的路徑(「C:\Users\用戶名\AppData\Roaming\npm」)改為:node安裝目錄\node_global
測試:
安裝成功,自定義文件夾如下所示:
在cmd命令下執行webpack -v 查看webpack版本,出現這個問題:『webpack』不是內部或外部命令,也不是可運行的程序或批處理文件:
確認安裝好了NodeJS,也安裝了webpack
檢查配置的路徑:環境變數下的用戶變數的path:
環境變數下的系統變數的NODE_PATH:
環境變數下的系統變數的Path,發現時少增加了D:\software\node\node_global,增加上之後:
因為安裝的webpack是高版本,還需要全局安裝webpack-cli,命令:npm install webpack-cli -g,安裝好後就可以了:
堅信問題是促使我們前進,問題也是讓我們產生了價值的意義所在,歡迎評論留言點贊。
『柒』 淺析nodejs的buffer比較怎麼比較的
Buffer結構
Buffer是一個典型的Javascript和C++結合的模塊,性能相關部分用C++實現,非性能相關部分用javascript實現。
Node在進程啟動時Buffer就已經加裝進入內存,並將其放入全局對象,因此無需require
Buffer對象:類似於數組,其元素是16進制的兩位數。
Buffer內存分配
Buffer對象的內存分配不是在V8的堆內存中,在Node的C++層面實現內存的申請。
為了高效的使用申請來得內存,Node中採用slab分配機制,slab是一種動態內存管理機制,應用各種*nix操作系統。slab有三種狀態:
(1) full:完全分配狀態
(2) partial:部分分配狀態
(3) empty:沒有被分配狀態
Buffer的轉換
Buffer對象可以和字元串相互轉換,支持的編碼類型如下:
ASCII、UTF-8、UTF-16LE/UCS-2、Base64、Binary、Hex
字元串轉Buffer
new Buffer(str, [encoding]),默認UTF-8
buf.write(string, [offset], [length], [encoding])
Buffer轉字元串
buf.toString([encoding], [start], [end])
Buffer不支持的編碼類型
通過Buffer.isEncoding(encoding)判斷是否支持
iconv-lite:純JavaScript實現,更輕量,性能更好無需C++到javascript的轉換
iconv:調用C++的libiconv庫完成
Buffer的拼接
注意 "res.on('data', function(chunk) {})",其中的參數chunk是Buffer對象,直接用+拼接會自動轉換為字元串,對於寬位元組字元可能會導致亂碼產生
解決方法:
(1) 通過可讀流中的setEncoding()方法,該方法可以讓data事件傳遞不再是Buffer對象,而是編碼後的字元串,其內部使用了StringEncoder模塊。
(2) 將Buffer對象暫存到數組中,最後在組裝成一個大Buffer讓後編碼轉換為字元串輸出。
Buffer在文件I/O和網路I/O中廣泛應用,其性能舉足輕重,比普通字元串性能要高出很多。
Buffer的使用除了與字元串的轉換有性能損耗外,在文件讀取時候,有一個highWaterMark設置對性能影響至關重要。
a,highWaterMark設置對Buffer內存的分配和使用有一定影響。
b, highWaterMark設置過小,可能導致系統調用次數過多。
什麼時候該用buffer,什麼時候不該用 ------ 純粹的javascript支持unicode碼而對二進制不是很支持,當解決TCP流或者文件流的時候,處理流是有必要的,我們保存非utf-8字元串,2進制等等其他格式的時候,我們就必須得使用 」Buffer「 。
『捌』 nodejs如何把c指針轉成buffer
在nodejs裡面需要通過socket向C進程發送結構體數據。
Buffer 作為 nodejs 中重要的概念和功能,為開發者提供了操作二進制的能力。Buffer 是 nodejs 核心 API,它提供我們處理二進制數據流的功能。Buffer 的使用和 ES2017 的 Uint8Array 非常相似,信亮埋但由滑螞於 node 的特性,專門提供了更深入的 api。Buffer 類是用來處理二進制數據,因為太常用了,所以直接放在了全局變數里鍵卜,使用的時候無需 require。
『玖』 nodejs的Buffer有辦法像c的結構體那樣用嗎
Buffer是流,沒有key/value結構,JS的key/value數據結構是object。
var u = {
name: "黨志明",
message: "..."
}
u.name
u.name = ..