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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

代码组织和部署 文件操作 node.js

發(fā)布時(shí)間:2025/7/25 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 代码组织和部署 文件操作 node.js 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

代碼組織和部署

模塊的路徑解析規(guī)則

require支持/或者盤符的絕對(duì)路徑,也支持./開頭的相對(duì)地址
同時(shí)require也支持第三種寫法

內(nèi)置模塊

如果傳遞給require的函數(shù)是node.js的內(nèi)置模塊,將會(huì)不做路徑解析,直接返回內(nèi)部exports模塊要導(dǎo)出的對(duì)象

node_modules目錄

node.js定義一個(gè)node_modules存放模塊,每次使用foo/bar的方式的時(shí)候,會(huì)先尋找該目錄下的node_modules,接著上一層,知道頂層為止

NODE_PATH環(huán)境變量

如果設(shè)置變量,將會(huì)按照變量的地址進(jìn)行尋找

包是由多個(gè)子模塊組成的大模塊為包,其中所有的子模塊都放進(jìn)同一個(gè)目錄里

index.js

當(dāng)模塊文件名為index.js的時(shí)候,加載模塊所在目錄的路徑代替模塊文件路徑

package.json

package.json能自定義入口模塊的路徑、

-/home/user/lib`cat/+ doc/- lib/head.jsbody.jsmain.js+ tests/package.json

以上為一個(gè)目錄文件
配置文件內(nèi)容如下

{"name": "cat";"main": "./lib/main.js"; }

其中定義該包的名稱為cat,入口文件為相對(duì)路徑下的main.js
即,加載該模塊的時(shí)候路徑為

/home/user/lib/cat

node.js會(huì)自動(dòng)根據(jù)配置文件找到入口模塊所在的位置

命令行程序

為了在任何目錄實(shí)現(xiàn)

node-echo hello word

windows

需要cmd文件,

需要先將其目錄添加到環(huán)境變量

在該目錄下創(chuàng)建cmd文件

創(chuàng)建cmd文件的目的是能鏈接執(zhí)行一個(gè)js文件

@node "C:\User\user\bin\node-echo.js" %*

這樣就完成了在任何目錄下使用

node-echo

命令

工程目錄

- /hoem/user/workspace/node-echo/ # 工程目錄- bin # 存放命令行相關(guān)代碼node-echo.js+ doc/ # 存放相關(guān)文檔- lib/ # 存放api相關(guān)代碼cho.js- node_modules/ # 存放第三方包+ argv/+ tests/ # 存放測(cè)試用例package.json # 元數(shù)據(jù)文件README.md # 說明文件

文件內(nèi)容

/*bin/node-echo*/ var argv = require("argv"),echo = require('../lib/echo'); console.log(echo(argv.join("")));/*lib/echo.js*/ module.exports = function (message) {return message; };/*package.json*/ {"name": "node-echo","main": "./lib/echo.js", }

npm

使用npm

require("argv");

因?yàn)榈谌邪趎ode_modules文件夾下,所以直接加上名稱即可使用

包依賴聲明

{"name": "node-echo","main": "./lib/echo.js","dependencies": {"argv": "0.0.2",}, };

聲明該報(bào)依賴argv包的0.0.2版本
下載包時(shí)候
直接

npm-install

即可批量安裝聲明的依賴包
當(dāng)他人下載的時(shí)候,也會(huì)自動(dòng)下載進(jìn)一步的依賴的第三方包
目錄結(jié)構(gòu)如下

- project/- node_modules/- node-echo/- node-modules/+ argv/

這樣就完成了包的問題

安裝命令行程序

~ %APPDATA%\npm\ # 在windows系統(tǒng)下- node_modules\+ node-echo\node-echo.cmd

版本號(hào)

x,y,z

修復(fù)bug時(shí),需要更新z位 增加新功能,并且向下兼容,更新到y(tǒng)為 大變動(dòng),不兼容,更新到x位

一些比較有用的npm

npm cache clear # 清空npm本地緩存 npm update -g # 將全局安裝的包更新到最新版

小結(jié)

寫代碼前,目錄結(jié)構(gòu)規(guī)劃后
稍微大的程序,使用模塊化管理

文件操作

首先

提供了一些文件操作的api

小文件拷貝

var fs = require("fs");var data = fs.readFileSync('input.txt');data = "sdferg" + data.toString(); for(var i = 0; i <= 10; i++){data = data + data; }fs.writeFileSync('put.txt', data);console.log(data); console.log("程序執(zhí)行結(jié)束!");

將其保存進(jìn)內(nèi)存中,進(jìn)行操作
隨帶著解釋一下第一句,第一句中的是將其fs模塊讀取,并保存進(jìn)入fs對(duì)象中

大文件拷貝

如果文件過大,這樣保存進(jìn)入內(nèi)存拷貝會(huì)導(dǎo)致內(nèi)存溢出,所以一點(diǎn)一點(diǎn)讀,邊讀邊寫

var fs = require("fs");var txt = fs.createReadStream("input.txt"); // 創(chuàng)建了一個(gè)只讀數(shù)據(jù)流 var writeTxt = fs.createWriteStream("out.txt"); //創(chuàng)建了一個(gè)寫的數(shù)據(jù)流 txt.pipe(writeTxt);

創(chuàng)建兩個(gè)流,將其連接,完成文件的讀寫

一些大致的api

數(shù)據(jù)塊

buffer對(duì)二進(jìn)制數(shù)據(jù)的操作
類似于C中的指針
slice方法類似C中的對(duì)于指針的移動(dòng)

數(shù)據(jù)流

stream基于事件工作,這是需要注意的
使用數(shù)據(jù)流的問題在于會(huì)產(chǎn)生讀完以后無法處理的情況,通過回調(diào)函數(shù),達(dá)到通知以后在讓生產(chǎn)者進(jìn)行處理,即消費(fèi)者每消費(fèi)一件,生產(chǎn)者進(jìn)行生產(chǎn)
ps: 回調(diào)目前看不懂,異步在下一節(jié)中有
這一點(diǎn)過

遍歷目錄

當(dāng)要找到并處理制定目錄下的所有js文件的時(shí)候,需要遍歷整個(gè)目錄

遞歸算法

遍歷目錄采用的是遞歸算法

遍歷算法

目錄為樹狀結(jié)構(gòu),遍歷采用深度優(yōu)先+先序的算法進(jìn)行遍歷嗎,到達(dá)節(jié)點(diǎn)以后,首先接著遍歷子節(jié)點(diǎn),而不是鄰居節(jié)點(diǎn),
舉例

A/ \B C/ \ \D E F

上方的樹,先A > B > D > E > C > F

ps。。我需要數(shù)據(jù)結(jié)構(gòu)。。有必要折騰一本js的數(shù)據(jù)結(jié)構(gòu)和算法

同步遍歷

先遇到目錄,然后接著遇到文件,當(dāng)遇到文件的時(shí)候,暫停遍歷,將結(jié)果通過回調(diào)函數(shù)給主程序進(jìn)行判斷,接著判斷結(jié)果返回,根據(jù)判斷的結(jié)果繼續(xù)進(jìn)行遍歷

異步遍歷

和同步變量完全相同,不過,是邊遍歷邊進(jìn)行返回,同時(shí)主程序也在運(yùn)行

文本編碼

常用的一個(gè)是萬(wàn)國(guó)碼的存儲(chǔ)方式utf-8,一個(gè)是gbk

bom的問題

bom會(huì)標(biāo)記文件的一些相關(guān)信息,下面是一個(gè)使用函數(shù),將其bom移出

function readText(pathname) {var bin = fs.readFileSync(pathname); // 創(chuàng)建一個(gè)流 創(chuàng)建一個(gè)讀取文件的數(shù)據(jù)流if (bin[0] === 0xEF && bin[1] === 0xBB %% bin[2] === 0xBF) {bin = bin.slice(3); // 去除bom}return bin.toString('utf-8') // 以u(píng)tf-8的格式進(jìn)行返回 };

GBK轉(zhuǎn)utf-8

GBk某種原因,不在支持范圍內(nèi)部,所以,如果讀取,需要將其轉(zhuǎn)換為utf-8
使用這個(gè)包iconv-lite進(jìn)行轉(zhuǎn)換,先使用npm進(jìn)行下載,完后進(jìn)行讀取,下面編寫一個(gè)函數(shù)進(jìn)行讀取

var iconv = require('iconv-lite'); // 加載相關(guān)模塊function readGBKText(pathname) {var bin = fs.readFileSync(pathname); // 創(chuàng)建文件流return iconv.decode(bin, 'gbk'); // 使用iconv模塊的decode方法,對(duì)bin進(jìn)行轉(zhuǎn)換 }

單字節(jié)編碼

因?yàn)橛⑽淖帜笡]有問題,全是ASCII進(jìn)行編碼和存儲(chǔ)的,由于gbk和utf-8的問題的導(dǎo)致,所以呢,儲(chǔ)存漢字的二進(jìn)制依舊不變即可,只變英文字母

小結(jié)

path模塊進(jìn)行路徑的拼接
fs模塊的同步更好用,異步真的能讓人崩潰
目錄遍歷和文件編碼的處理

總結(jié)

以上是生活随笔為你收集整理的代码组织和部署 文件操作 node.js的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 爱爱中文字幕 | 九九色精品 | xx视频在线观看 | 成人久久国产 | 免费观看视频一区二区 | 成年人在线免费观看视频网站 | 男裸体无遮挡网站 | 自拍视频国产 | 国产精品久久国产精品 | 中国老熟女重囗味hdxx | 精品亚洲天堂 | 日韩欧美一级 | 中文毛片无遮挡高潮免费 | www国产亚洲精品久久麻豆 | 桃色一区 | 亚洲精品乱码久久久久久蜜桃动漫 | 日韩 欧美 综合 | 爽爽影院在线 | 亚洲一区二区三区在线观看视频 | 少妇紧身牛仔裤裤啪啪 | 国产精品无码一区二区三区免费 | 欧美丰满老熟妇aaaa片 | 色天天综合 | 欧美国产一区二区在线观看 | 日韩成人高清视频 | 国产97免费视频 | 成年人黄色大片 | 日韩中文在线观看 | 国产另类综合 | 久久久午夜影院 | 成人免费毛片入口 | 男生女生操操操 | wwwxxx在线观看 | 日本一区二区三区在线免费观看 | 一区二区精品久久 | 亚洲精品国产日韩 | 中文字幕av一区二区三区人妻少妇 | 成人免费毛片入口 | 一本色道久久88综合日韩精品 | 天天综合天天做天天综合 | 精品一区二区在线看 | 波多野结衣一二区 | 久久人人澡 | 韩国禁欲系高级感电影 | 好吊色网站 | 欧美成人aaa | 中国av在线播放 | 久久久久久久国产 | 精品国产91乱码一区二区三区 | 中文字幕在线一区二区三区 | 久久久av电影 | 日韩五码电影 | 久久久久久久久久久久久女过产乱 | 成人在线综合网 | 国产精品久久久久久久久久久新郎 | 免费网站av | 97超碰色 | 999免费 | 久久av一区二区三区漫画 | 亚洲成人动漫在线观看 | www.黄色小说.com| aaa一区二区 | 精品无码久久久久久久久果冻 | 国产内射一区 | 午夜在线影院 | 小视频黄色 | 欧美成人aaa片一区国产精品 | 亚洲小视频网站 | 爱蜜臀av | 五月激情五月婷婷 | 一本色道久久综合亚洲精品小说 | 天堂中文视频 | 欧美性受xxxx白人性爽 | xvideos永久免费入口 | 亚洲成人av电影网站 | 日韩黄色三级 | 日本69av| 亚洲高清中文字幕 | 亚洲黄色在线免费观看 | 强开小受嫩苞第一次免费视频 | 久久久无码精品亚洲无少妇 | 99精品成人| 国产成人一区 | 免费色片 | 午夜一区二区三区免费观看 | 一区二区三区影院 | 天堂在线www | 中文字幕91在线 | www.欧美一区二区三区 | 欧美日韩国产精品一区 | 国产美女主播视频 | 小柔好湿好紧太爽了国产网址 | 午夜激情免费 | 潘金莲三级80分钟 | 色呦呦影院 | 深夜视频在线免费观看 | 五月激情综合婷婷 | 97av在线视频| 亚洲色图日韩 |