npm start 與 node app.js 的區(qū)別?

背景

npm start 與 node app.js 的區(qū)別毫深? 寫下這個標(biāo)題吩坝,對于不清楚背景的人來說,不知所云哑蔫。 因為二者本來沒什么必然的聯(lián)系钉寝,也就談不上區(qū)別弧呐。 不過對于 MEAN 全棧初學(xué)者來說嵌纲,產(chǎn)生這個疑問也合乎常理俘枫。

對于 node.js 開發(fā)者來說,首先接觸到的就是 node app.js

回顧下node.js 的學(xué)習(xí)歷程: 創(chuàng)建一個 應(yīng)用程序鸠蚪, 通常命名為 app.js 或 server.js 师溅。 那么墓臭,如何運(yùn)行這個應(yīng)用程序呢榆综?

啟動app.js 的方法: 打開終端窗口,進(jìn)入到 app.js 文件所在的路徑崭篡,

node app.js 

npm start 又是怎么回事呢斯入?

npm start 這個命令滋迈,是來自創(chuàng)建的 Express 工程。 我們可以創(chuàng)建 node.js 工程女责,也可以創(chuàng)建 express 工程残制。Express是基于node.js 的后臺框架搁宾,用Express 會簡單很多堕伪。

那么禁炒,如何創(chuàng)建 express 工程呢悠瞬?

(1) 全局安裝 express: $ sudo npm install -g express
(2) 安裝 express 命令行工具: $ sudo npm install -g express-generator

打開終端窗口辩尊,進(jìn)入到工程(文件夾)所在路徑惦辛,執(zhí)行命令:

express --view=ejs myShop
需要注意的是添坊,創(chuàng)建Express工程時雨女,默認(rèn)的視圖模板引擎是Jade。在這個實例中帮寻,我們選用EJS模板引擎

Express 工程創(chuàng)建完畢后 耘戚,在它的 package.json 文件中串结,有這么一行代碼:

package.json
"scripts": {
    "start": "node ./bin/www"
  },

npm start 命令耽装,就是這么來的期揪。 執(zhí)行 npm start指令掉奄,就相當(dāng)于執(zhí)行 node ./bin/www

www 文件才是 Express 應(yīng)用的真正的入口。

bin -> www 文件

仔細(xì)看下 www 文件的代碼横侦,如下:

#!/usr/bin/env node

/**
 * Module dependencies.
 */

var app = require('../app');
var debug = require('debug')('myshop:server');
var http = require('http');

/**
 * Get port from environment and store in Express.
 */

var port = normalizePort(process.env.PORT || '3000');
app.set('port', port);

/**
 * Create HTTP server.
 */

var server = http.createServer(app);

/**
 * Listen on provided port, on all network interfaces.
 */

server.listen(port);
server.on('error', onError);
server.on('listening', onListening);

/**
 * Normalize a port into a number, string, or false.
 */

function normalizePort(val) {
  var port = parseInt(val, 10);

  if (isNaN(port)) {
    // named pipe
    return val;
  }

  if (port >= 0) {
    // port number
    return port;
  }

  return false;
}

/**
 * Event listener for HTTP server "error" event.
 */

function onError(error) {
  if (error.syscall !== 'listen') {
    throw error;
  }

  var bind = typeof port === 'string'
    ? 'Pipe ' + port
    : 'Port ' + port;

  // handle specific listen errors with friendly messages
  switch (error.code) {
    case 'EACCES':
      console.error(bind + ' requires elevated privileges');
      process.exit(1);
      break;
    case 'EADDRINUSE':
      console.error(bind + ' is already in use');
      process.exit(1);
      break;
    default:
      throw error;
  }
}

/**
 * Event listener for HTTP server "listening" event.
 */

function onListening() {
  var addr = server.address();
  var bind = typeof addr === 'string'
    ? 'pipe ' + addr
    : 'port ' + addr.port;
  debug('Listening on ' + bind);
}

如果把 www 文件中代碼全部移到 app.js 中挥萌, 就可以用 node app.js 替代 npm start 了绰姻。

小結(jié)

從www 代碼可以看出,配置了端口號 : 3000引瀑。 還有狂芋,增加了些異常處理。 這些異常處理機(jī)制憨栽,通常不用改動帜矾。 唯一有可能要改動的,就是 端口號屑柔。

瀏覽器訪問時屡萤,http://localhost:3000 中的 3000 就是在這里設(shè)置的。


參考書: 《 全棧開發(fā)之道:MongoDB+Express+AngularJS+Node.js


更多全棧技術(shù)掸宛,請關(guān)注微信公眾號: “全棧工程師的早讀課”死陆,每天早8:00 準(zhǔn)時推送技術(shù)文章。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末唧瘾,一起剝皮案震驚了整個濱河市措译,隨后出現(xiàn)的幾起案子坑赡,更是在濱河造成了極大的恐慌杏节,老刑警劉巖刘急,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件已脓,死亡現(xiàn)場離奇詭異,居然都是意外死亡右蒲,警方通過查閱死者的電腦和手機(jī)豌注,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進(jìn)店門妙真,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蝠嘉,“玉大人最疆,你說我怎么就攤上這事≡楦妫” “怎么了肚菠?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長罩缴。 經(jīng)常有香客問我,道長层扶,這世上最難降的妖魔是什么箫章? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮镜会,結(jié)果婚禮上檬寂,老公的妹妹穿的比我還像新娘。我一直安慰自己戳表,他們只是感情好桶至,可當(dāng)我...
    茶點故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布昼伴。 她就那樣靜靜地躺著,像睡著了一般镣屹。 火紅的嫁衣襯著肌膚如雪圃郊。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天女蜈,我揣著相機(jī)與錄音持舆,去河邊找鬼。 笑死伪窖,一個胖子當(dāng)著我的面吹牛逸寓,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播覆山,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼竹伸,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了簇宽?” 一聲冷哼從身側(cè)響起勋篓,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎晦毙,沒想到半個月后生巡,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡见妒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年孤荣,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片须揣。...
    茶點故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡盐股,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出耻卡,到底是詐尸還是另有隱情疯汁,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布卵酪,位于F島的核電站幌蚊,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏溃卡。R本人自食惡果不足惜溢豆,卻給世界環(huán)境...
    茶點故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望瘸羡。 院中可真熱鬧漩仙,春花似錦、人聲如沸队他。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽麸折。三九已至锡凝,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間磕谅,已是汗流浹背私爷。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留膊夹,地道東北人衬浑。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像放刨,于是被迫代替她去往敵國和親工秩。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,527評論 2 349

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