JAVA程序員如何轉(zhuǎn)node_03

前言

本文的前置文章

JAVA程序員如何轉(zhuǎn)node_01
JAVA程序員如何轉(zhuǎn)node_02

本文會(huì)介紹的東西

1、npm node的包管理工具

2郁稍、koa 今天先簡單運(yùn)行一下,具體下節(jié)再分析


javascript的文件管理

談node總避不開npm苦囱,但是在談npm之前牙肝,我覺得你有必要先了解一下js中module和npm是什么關(guān)系。

歷史上javaScript是沒有文件組織關(guān)系的陌凳,想想你之前寫的前端js,是不是每次都用<script>標(biāo)簽包起來内舟,或者寫在一個(gè)js文件中合敦,然后在html中去引用他。

在最開始验游,javaScript的變量都是用var來定義充岛,這種情況下他相當(dāng)于直接把對(duì)象加載到了全局,你寫了之后在其他文件都能對(duì)其進(jìn)行訪問與修改耕蝉,這對(duì)文件的組織造成了極大的困難崔梗。試想一下你在兩個(gè)js文件中都使用var user來定義對(duì)象,這時(shí)候兩個(gè)js文件都被引用在一個(gè)html文件中時(shí)垒在,兩個(gè)對(duì)象就會(huì)相互沖突蒜魄。這個(gè)問題對(duì)js開發(fā)大型的、復(fù)雜的項(xiàng)目造成了巨大障礙场躯。

node要做后臺(tái)應(yīng)用谈为,勢(shì)必要對(duì)文件、模塊進(jìn)行管理踢关。所以到了后面伞鲫,有了module這種語法,有了以文件為單位的模塊化管理工具耘成,大家開始用let定義變量(let定義的對(duì)象生命周期在當(dāng)前函數(shù)之內(nèi))榔昔,在文件的末尾處module.export你要暴露出來的變量,在文件開頭用require引入變量瘪菌,文件的管理才變得有章可循撒会。

簡單舉個(gè)例子,新建兩個(gè)文件app.js 和utils.js师妙。

// utils.js
function add (a, b) {
    return a + b;
}
module.exports = {
    add
}

//app.js
let{ add } = require('./utils');
console.log(add(1,2));

在目錄下cmd執(zhí)行命令 node app.js,就會(huì)看到有3的輸出诵肛。

關(guān)于module的具體用法可以看

module的語法

npm

而npm是node對(duì)包的管理工具,使用它的時(shí)候,你的項(xiàng)目就被組織成一個(gè)包的形式怔檩,它相當(dāng)于java中的maven褪秀。這時(shí)候工程目錄下就會(huì)有一個(gè)package.json記錄你這個(gè)項(xiàng)目用了哪些包(相當(dāng)與maven中的pom.xml)

要在本地中生成這個(gè)package.json,你只需要執(zhí)行 npm init,然后根據(jù)它的提示輸入信息就行,如果你什么都不想輸入薛训,一路回車也是可以的媒吗。這樣目錄中就多了package.json這個(gè)文件。

{
  "name": "test4",
  "version": "1.0.0",
  "description": "",
  "main": "app.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}

其中name就是你的項(xiàng)目的包名乙埃,main就是你的包的程序主入口闸英,這里我把它改成了剛才寫的app.js。

scripts中的字段可以用npm run 來調(diào)用介袜,比如上面的test我可以在cmd中輸入npm run test甫何,它相當(dāng)于執(zhí)行了"echo "Error: no test specified" && exit 1" 這段腳本。

一般來說用npm將通用的方法打包成一個(gè)模塊供別人使用遇伞,都需要再npm官網(wǎng)注冊(cè)一個(gè)賬號(hào)辙喂,然后將npm模塊上傳到npm官網(wǎng)中。但是目前我一直都沒有注冊(cè)(主要是懶)鸠珠,所以一直都是用npm link本地鏈接使用或者使用公司的gitlab(相當(dāng)于github)來發(fā)布和托管巍耗。

為了顯示如何使用我當(dāng)前這個(gè)模塊,我先演示一下如何使用npm link引用剛才寫的包渐排。如果有人感興趣另一種方式芍锦,就留言一下。

首先飞盆,經(jīng)過剛才一番操作,我現(xiàn)在的代碼結(jié)構(gòu)目錄及內(nèi)容如下次乓。(package-lock.json不太重要)

在vscode中快捷鍵ctrl + J調(diào)出終端(cmd)吓歇,輸入 npm link。這時(shí)候票腰,npm 就會(huì)把你當(dāng)前這個(gè)包臨時(shí)存放在你本地全局存放npm包的地方城看。

現(xiàn)在我創(chuàng)建另一個(gè)test5目錄,同樣ctrl + J調(diào)出終端杏慰,輸入npm link test4(test4是剛才的包名)测柠。可以看到目錄下多了一個(gè)node_module文件夾缘滥,里面存放著一個(gè)test4文件夾轰胁。

test4的右邊有一個(gè)箭頭,說明它不是下載到當(dāng)前目錄的文件,只是一個(gè)類似快捷方式的引用而以。

現(xiàn)在我們就可以對(duì)其進(jìn)行引用了宫蛆,在當(dāng)前目錄下新建app.js,并鍵入require('test4')

執(zhí)行app.js即可看到輸出3右钾。這便是test4包中app.js所運(yùn)行的結(jié)果泼各。

簡單演示到這里偎肃。需要說明的是稽屏,npm引用也可以跟上面一樣

const utils = require('test4');
utils.add();  ....

這只取決于test4中的app.js有沒有module.exports變量出來卵贱。npm甚至可以將方法掛載到對(duì)象之中驮俗,比如將某些方法掛載到每次請(qǐng)求的實(shí)例對(duì)象之中懂缕,具體可以自行了解。

npm的方便之處

npm可太方便了王凑,無論你需要什么包搪柑,直接npm Install [包名]就可以下載到你的目錄當(dāng)中的node_modules文件夾中,如果你只是想臨時(shí)用一下一個(gè)包荤崇,就npm install [包名]拌屏。如果你想把這個(gè)包記錄在package.json中,就npm install --save [包名]术荤,項(xiàng)目上傳代碼一般不會(huì)把node_module中的文件一起帶上倚喂,但是會(huì)帶上package.json,這樣你拿到了代碼,只需要輸入npm install瓣戚,npm就會(huì)幫你把package.json中記錄的那些包都下到本地端圈。

為了顯示npm的方便我就簡單演示一下如何node是如何搭建網(wǎng)絡(luò)應(yīng)用的。

koa

1子库、進(jìn)入一個(gè)目錄舱权,點(diǎn)開cmd,輸入npm i koa

2仑嗅、在該目錄下新建app.js,輸入以下代碼

const Koa = require('koa');
const app = new Koa();
app.use(async ctx => { ctx.body = 'Hello World';});
app.listen(8080);
console.log('Server running at http://127.0.0.1:8080/');

3宴倍、在cmd中輸入 node app.js

4、在瀏覽器地址欄中輸入127.0.0.1:8888仓技,就會(huì)看到hello world鸵贬!

注:async ctx => { ctx.body = 'Hello World';}是下面這個(gè)函數(shù)的簡寫。

async function func(ctx){
ctx.body = 'Hello World';
}

有沒有發(fā)現(xiàn)很簡單就實(shí)現(xiàn)了一個(gè)網(wǎng)絡(luò)應(yīng)用脖捻!不用像java一樣還需要寫servlet阔逼、將項(xiàng)目打包放入apache中、開啟服務(wù)地沮。統(tǒng)統(tǒng)不用嗜浮,node中直接就可以對(duì)請(qǐng)求進(jìn)行處理。

此外npm也使項(xiàng)目的構(gòu)建變得非常方便摩疑,簡單一個(gè)npm install方法就可以將模塊下載到本地node_module中危融,不用像maven一樣進(jìn)行配置、管理未荒。

此外专挪,npm init不僅可以生成package.json。它還可以對(duì)項(xiàng)目進(jìn)行初始化(簡單來說就是將某個(gè)框架的初始化目錄結(jié)構(gòu)整個(gè)拖拽到本地)這大大提高了應(yīng)用的開發(fā)效率。


后記

今天先寫到這寨腔,下一節(jié)估計(jì)會(huì)講一下node的網(wǎng)站開發(fā)和koa都做了什么速侈。

如果你覺得我的分享有用的話,可以留下你的點(diǎn)贊或者評(píng)論迫卢,蟹蟹倚搬!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市乾蛤,隨后出現(xiàn)的幾起案子每界,更是在濱河造成了極大的恐慌,老刑警劉巖家卖,帶你破解...
    沈念sama閱讀 218,386評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件眨层,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡上荡,警方通過查閱死者的電腦和手機(jī)趴樱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來酪捡,“玉大人叁征,你說我怎么就攤上這事」滢保” “怎么了捺疼?”我有些...
    開封第一講書人閱讀 164,704評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長永罚。 經(jīng)常有香客問我啤呼,道長,這世上最難降的妖魔是什么呢袱? 我笑而不...
    開封第一講書人閱讀 58,702評(píng)論 1 294
  • 正文 為了忘掉前任媳友,我火速辦了婚禮,結(jié)果婚禮上产捞,老公的妹妹穿的比我還像新娘。我一直安慰自己哼御,他們只是感情好坯临,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著恋昼,像睡著了一般看靠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上液肌,一...
    開封第一講書人閱讀 51,573評(píng)論 1 305
  • 那天挟炬,我揣著相機(jī)與錄音,去河邊找鬼。 笑死谤祖,一個(gè)胖子當(dāng)著我的面吹牛婿滓,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播粥喜,決...
    沈念sama閱讀 40,314評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼凸主,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了额湘?” 一聲冷哼從身側(cè)響起卿吐,我...
    開封第一講書人閱讀 39,230評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎锋华,沒想到半個(gè)月后嗡官,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,680評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡毯焕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評(píng)論 3 336
  • 正文 我和宋清朗相戀三年衍腥,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片芥丧。...
    茶點(diǎn)故事閱讀 39,991評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡紧阔,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出续担,到底是詐尸還是另有隱情擅耽,我是刑警寧澤,帶...
    沈念sama閱讀 35,706評(píng)論 5 346
  • 正文 年R本政府宣布物遇,位于F島的核電站乖仇,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏询兴。R本人自食惡果不足惜乃沙,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望诗舰。 院中可真熱鬧警儒,春花似錦、人聲如沸眶根。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽属百。三九已至记劝,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間族扰,已是汗流浹背厌丑。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評(píng)論 1 270
  • 我被黑心中介騙來泰國打工定欧, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人怒竿。 一個(gè)月前我還...
    沈念sama閱讀 48,158評(píng)論 3 370
  • 正文 我出身青樓砍鸠,卻偏偏與公主長得像,于是被迫代替她去往敵國和親愧口。 傳聞我的和親對(duì)象是個(gè)殘疾皇子睦番,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容