node項目commonjs,node項目部署到服務器

本文目錄一覽:

commonjs需要安裝node嗎

Common.js是VC中通過js創建項目模板的,出現這個問題不會影響使用。這個問題要解決就重新安裝,或許你修改了編譯器,解釋器,它無法識別該js的版本,所以報錯。

簡述什麼是commonjs,以及其與nodejs的關係

自從CommonJS和NodeJS兩個項目的出現,JavaScript作為本地編程語言的這種特殊應用形式,才開始進入進入大眾的視野。

說明什麼是CommonJS。 另外隨着並行計算的普及,像JavaScript這種函數式語言,由於其固有的易於進行並行計算的特性,將有更廣闊的應用前景。

如何在vscode中使用nodejs

一、使用Express創建項目[這兩步都在dos 模式下執行]

1,安裝全局的Express!(已安裝請忽略)

npm install -g express

2,創建項目

創建項目(創建文件夾名稱ExpressApp)

express ExpressApp

小插曲:如果你習慣了Linux下的環境,你可以在自己電腦上安裝cmder(不知道是什麼東西,請自行百度),這個命令行工具排版漂亮,不像微軟的dos 那麼枯燥!我用的是Mini版本,如果你想體驗linux下的全部功能,可以下載full版本。

3,下載第三方包

(1)cmd命令行切換到項目目錄

cd d:\nodejs\ExpressApp

(2)根據需要編輯package.json,運行如下指令安裝第三方包

npm install

在項目目錄下node_modules可見安裝好的第三方包

ExpressApp

|– node_modules

(3)運行項目

npm start

輸出如下:

ExpressApp@0.0.0 start d:\Nodejs_Workspace\ExpressApp

node ./bin/www

註:npm start指令會自動執行node ./bin/www

在瀏覽器中輸入,可訪問Express歡迎頁面

二、使用VSCode開發Nodejs

1、VSCode打開Nodejs

code d:\nodejs\ExpressAppcode.

註:在當前項目下創建ExpressApp.bat,輸入“code .”即可,下次直接此文件直接使用VSCode打開Nodejs項目

2、添加智能提示

VSCode打開Nodejs項目,默認是沒有智能提示。

(1)使用TypeScript Definition Manager(TSD)在項目中下載所需的tsd文件,VSCode中打開時有智能

全局安裝tsd(如已安裝忽略)

npm install -g tsd

下載所需的組件提示(以下載node、express、requirejs提示為例)

tsd query node –action installtsd query express –action installtsd install require

註:

①多個提示組件在query參數後可以空格分隔簡寫為tsd query node express –action install

②組件會項目目錄下添加typings文件夾

|– typings

|– node

|– express

|– require

(2)添加js文件引用的智能提示

假如在文件引用另外一個文件common.js時,文件頭添加如下

{ // See // for the documentation about the jsconfig.json format “compilerOptions”: { “target”: “es6”, “module”: “commonjs”, “allowSyntheticDefaultImports”: true }, “exclude”: [ “node_modules”, “bower_components”, “jspm_packages”, “tmp”, “temp” ]}

(小提示,如果你引入了rquire,那麼你的編輯器右下方會顯示一個“燈泡”的提示,你只要點燈泡就不用自己苦逼的寫這個配置文件了)

此配置表示代碼服從ES5標準並使用commonjs規範,發VScode下有此配置之後,可以實現在文件中對require引用js文件的智能提示。(我測試時無此配置也會有智能提示,不清楚什麼原因)

node.js 基礎操作

require 函數用來在一個模塊中引入另外一個模塊。傳入一個模塊名,返回一個模塊導出對象。用法: let cc = require(“模塊名”) ,其中模塊名可以用絕對路徑也可以用相對路徑,模塊的後綴名.js可以省略。例如:

require()函數用兩個作用:

exports 對象用來導出當前模塊的公共方法或屬性,別的模塊通過 require 函數使用當前模塊時得到的就是當前模塊的 exports 對象。用法: exports.name ,name為導出的對象名。例子:

module.exports 用來導出一個默認對象,沒有指定對象名,常見於修改模塊的原始導出對象。比如原本模塊導出的是一個對象,我們可以通過module.exports修改為導出一個函數。如下:

3.加載第三方包

Node.js中使用 CommonJs 模塊化機制,通過 npm 下載的第三方包,我們在項目中引入第三方包都是: let xx = require(‘第三方包名’) ,究竟 require 方法加載第三方包的原理機制是什麼,今天我們來探討下。

require(‘第三方包名’) 優先在加載該包的模塊的同級目錄 node_modules 中查找第三方包。

找到該第三方包中的 package.json 文件,並且找到裡面的 main 屬性對應的入口模塊,該入口模塊即為加載的第三方模塊。

如果在要加載的第三方包中沒有找到 package.json 文件或者是 package.json 文件中沒有 main 屬性,則默認加載第三方包中的 index.js 文件。

如果在加載第三方模塊的文件的同級目錄沒有找到 node_modules 文件夾,或者以上所有情況都沒有找到,則會向上一級父級目錄下查找 node_modules 文件夾,查找規則如上一致。

如果一直找到該模塊的磁盤根路徑都沒有找到,則會報錯: can not find module xxx 。

4.npm命令

npm 英文全稱: node package manager ,npm 為你和你的團隊打開了連接整個 JavaScript 天才世界的一扇大門。它是世界上最大的軟件註冊表,每星期大約有 30 億次的下載量,包含超過 600000 個 包(package) (即,代碼模塊)。來自各大洲的開源軟件開發者使用 npm 互相分享和借鑒。包的結構使您能夠輕鬆跟蹤依賴項和版本。我們平時開發項目都是需要使用npm下載依賴,常見的npm命令總結如下:

5.文件讀取

var fs = require(‘fs’)

同步:

var content = fs.readFileSync(‘hello.txt’,{flag:’r’,encoding:”utf-8″})

異步(默認):

flag:讀取模式

encoding:編碼格式

7.文件寫入

var fs = require(‘fs’)

格式:write=w read=r append =a

異步:

8.文件刪除

fs . unlink ( ‘lc.txt’ , function (){

9.buffer緩衝區

1、數組不能進行二進制數據的操作2、js數組不像java、python等語言效率高3、buffer內存空間開闢出固定大小的內存

let buf1 = Buffer.alloc(10)

console.log(buf1)

allocUnsafe(之前的一些內容)(效率高)

10.文件目錄

var fs = require(‘fs’)

fs.readdir(path,callback)

導入 readline 包

let readline = require(‘readline’);

實例化接口對象(process對象,stdout/in輸入輸出)

question方法 提問

close 事件監聽

11.文件流

var fs = require(‘fs’)

語法: fs.createWriteStream(文件路徑,【可選的配置操作】)

let ws = fs.createWriteStream(“hello.txt”,{flags:”w”,encoding:”utf-8″});

let ws = fs.createWriteStream(“hello.txt”,{flags:”w”,encoding:”utf-8″});

實踐

fs.createReadStream(路徑,【可選的配置項】)

文檔

let rs = fs.createReadStream(‘hello.txt’,{flags:’r’,encoding:”utf-8″})

音樂

let rs = fs.createReadStream(‘snake.mp4′,{flags:’r’})

讀取時寫入

let ws = fs.createWriteStream(‘a.txt’,{flags:”w”,encoding:”utf-8″})

createReadStream.pipe(createWriteStream)

鏈式是通過連接輸出流到另外一個流並創建多個流操作鏈的機制。鏈式流一般用於管道操作。

接下來我們就是用管道和鏈式來壓縮和解壓文件。

創建 compress.js 文件, 代碼如下:

代碼執行結果如下:

執行完以上操作後,我們可以看到當前目錄下生成了 input.txt 的壓縮文件 input.txt.gz。

接下來,讓我們來解壓該文件,創建 decompress.js 文件,代碼如下:

12.node事件

Node.js 是單進程單線程應用程序,但是因為 V8 引擎提供的異步執行回調接口,通過這些接口可以處理大量的並發,所以性能非常高。

Node.js 幾乎每一個 API 都是支持回調函數的。

Node.js 基本上所有的事件機制都是用設計模式中觀察者模式實現。

Node.js 單線程類似進入一個while(true)的事件循環,直到沒有事件觀察者退出,每個異步事件都生成一個事件觀察者,如果有事件發生就調用該回調函數.

沒有使用 events 包 僅使用JavaScript事件監聽進行事件驅動

Node.js 使用事件驅動模型,當web server接收到請求,就把它關閉然後進行處理,然後去服務下一個web請求。

當這個請求完成,它被放回處理隊列,當到達隊列開頭,這個結果被返回給用戶。

這個模型非常高效可擴展性非常強,因為 webserver 一直接受請求而不等待任何讀寫操作。(這也稱之為非阻塞式IO或者事件驅動IO)

在事件驅動模型中,會生成一個主循環來監聽事件,當檢測到事件時觸發回調函數。

Node.js 有多個內置的事件,我們可以通過引入 events 模塊,並通過實例化 EventEmitter 類來綁定和監聽事件,如下實例:

以下程序綁定事件處理程序:

我們可以通過程序觸發事件:

接下來讓我們執行以上代碼:

在 Node 應用程序中,執行異步操作的函數將回調函數作為最後一個參數, 回調函數接收錯誤對象作為第一個參數。

接下來讓我們來重新看下前面的實例,創建一個 input.txt ,文件內容如下:

創建 main.js 文件,代碼如下:

以上程序中 fs.readFile() 是異步函數用於讀取文件。如果在讀取文件過程中發生錯誤,錯誤 err 對象就會輸出錯誤信息。

如果沒發生錯誤,readFile 跳過 err 對象的輸出,文件內容就通過回調函數輸出。

執行以上代碼,執行結果如下:

接下來我們刪除 input.txt 文件,執行結果如下所示:

因為文件 input.txt 不存在,所以輸出了錯誤信息。

Node.js 所有的異步 I/O 操作在完成時都會發送一個事件到事件隊列。

Node.js 裡面的許多對象都會分發事件:一個 net.Server 對象會在每次有新連接時觸發一個事件, 一個 fs.readStream 對象會在文件被打開的時候觸發一個事件。所有這些產生事件的對象都是 events.EventEmitter 的實例。

events 模塊只提供了一個對象:events.EventEmitter。EventEmitter 的核心就是事件觸發與事件監聽器功能的封裝。

你可以通過require(“events”);來訪問該模塊。

EventEmitter 對象如果在實例化時發生錯誤,會觸發 error 事件。當添加新的監聽器時,newListener 事件會觸發,當監聽器被移除時,removeListener 事件被觸發。

下面我們用一個簡單的例子說明 EventEmitter 的用法:

執行結果如下:

運行這段代碼,1 秒後控制台輸出了 ‘some_event 事件觸發’ 。其原理是 event 對象註冊了事件 some_event 的一個監聽器,然後我們通過 setTimeout 在 1000 毫秒以後向 event 對象發送事件 some_event,此時會調用some_event 的監聽器。

EventEmitter 的每個事件由一個事件名和若干個參數組成,事件名是一個字符串,通常表達一定的語義。對於每個事件,EventEmitter 支持 若干個事件監聽器。

當事件觸發時,註冊到這個事件的事件監聽器被依次調用,事件參數作為回調函數參數傳遞。

讓我們以下面的例子解釋這個過程:

執行以上代碼,運行的結果如下:

以上例子中,emitter 為事件 someEvent 註冊了兩個事件監聽器,然後觸發了 someEvent 事件。

運行結果中可以看到兩個事件監聽器回調函數被先後調用。這就是EventEmitter最簡單的用法。

EventEmitter 提供了多個屬性,如 on 和 emit 。 on 函數用於綁定事件函數, emit 屬性用於觸發一個事件。接下來我們來具體看下 EventEmitter 的屬性介紹。

如何在node.js中使用requirejs

requirejs官方提供了一個可用於node的適配器 r.js 。有兩種方法可以在項目裡面加入此庫。

1. npm

在具體項目目錄下使用如下命令來引入requirejs:

npm install requirejs

windows環境下安裝需要注意不要加上 -g 全局開關,否則不能正常安裝。

安裝完成後,可使用 require(‘requirejs’) 來加載requirejs。

2. 下載r.js

如果不想使用npm,也可以直接下載r.js,並把它放到項目中達到同樣的目的。

點擊下載。

在項目中通過 require(‘/path/to/r.js’) 來加載requirejs。

配置

配置requirejs

var requirejs=require(‘requirejs’);

requirejs.config({

//把node自身的require方法傳遞給requirejs

nodeRequire: require

});

requirejs([“foo”,”bar”],function(foo,bar){});

在需要使用requirejs的地方可以用上面的代碼來配置requirejs。首先加載requirejs模塊,命名為 requirejs (可以為其他命名)。然後對 requirejs 進行配置。配置的方法和參數可以參照瀏覽器版本的requirejs的 配置說明 。不過有一點不同,如代碼所示,我們需要把node的 require 方法引進來。最後一行是簡單地加載模塊的示例,requirejs會嘗試把 foo 和 bar 兩個模塊當成AMD模塊來加載,如果失敗,則會調用node的 requie 方法來把它們當作commonjs模塊加載。為了實現這樣的適應性,所以我們需要配置node的 require方法。但實際測試並不盡如人意,保險起見,還是對AMD模塊使用 requirejs 加載,對commonjs模塊使用 require 加載。

構造AMD格式的node模塊

在node中定義的模塊是commonjs模塊,如果想要構造AMD模塊,我們需要amdefine 這個包。

安裝amdefine

同樣,可以使用npm進行安裝,在項目目錄下執行:

npm install amdefine

在windows下也存在無法全局安裝的問題,需要對項目單獨安裝。

定義define方法

if(typeof define !== ‘function’){

var define=require(‘amdefine’)(module);

}

amdefine提供了包裝AMD模塊的 define 方法。不過上面代碼中對於node中是否包含define方法的檢測判斷請保留,最好原封不動地將這幾行拷貝到自己的項目中。這樣,我們就可以像使用前端requirejs一樣,定義和使用AMD模塊。

原創文章,作者:ERJL,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/147013.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
ERJL的頭像ERJL
上一篇 2024-10-31 15:34
下一篇 2024-11-01 14:04

相關推薦

  • 掌握magic-api item.import,為你的項目注入靈魂

    你是否曾經想要導入一個模塊,但卻不知道如何實現?又或者,你是否在使用magic-api時遇到了無法導入的問題?那麼,你來到了正確的地方。在本文中,我們將詳細闡述magic-api的…

    編程 2025-04-29
  • 服務器安裝Python的完整指南

    本文將為您提供服務器安裝Python的完整指南。無論您是一位新手還是經驗豐富的開發者,您都可以通過本文輕鬆地完成Python的安裝過程。以下是本文的具體內容: 一、下載Python…

    編程 2025-04-29
  • STUN 服務器

    STUN 服務器是一個網絡服務器,可以協助網絡設備(例如 VoIP 設備)解決 NAT 穿透、防火牆等問題,使得設備可以正常地進行數據傳輸。本文將從多個方面對 STUN 服務器做詳…

    編程 2025-04-29
  • 解決docker-compose 容器時間和服務器時間不同步問題

    docker-compose是一種工具,能夠讓您使用YAML文件來定義和運行多個容器。然而,有時候容器的時間與服務器時間不同步,導致一些不必要的錯誤和麻煩。以下是解決方法的詳細介紹…

    編程 2025-04-29
  • GitHub好玩的開源項目

    本文旨在介紹GitHub上一些好玩的開源項目,並提供代碼示例供讀者參考和學習。 一、Emoji列表 GitHub上有一份完整的Emoji列表,它支持各種平台和設備,方便用戶在Git…

    編程 2025-04-28
  • 如何將Java項目分成Modules並使用Git進行版本控制

    本文將向您展示如何將Java項目分成模塊,並使用Git對它們進行版本控制。分割Java項目可以使其更容易維護和拓展。Git版本控制還可以讓您跟蹤項目的發展並協作開發。 一、為什麼要…

    編程 2025-04-28
  • Django框架:從簡介到項目實戰

    本文將從Django的介紹,以及如何搭建Django環境開始,逐步深入到Django模型、視圖、模板、表單,最後通過一個小型項目實戰,進行綜合性的應用,讓讀者獲得更深入的學習。 一…

    編程 2025-04-28
  • IIS部署Python項目

    本文將從多個方面詳細闡述在IIS上如何部署Python項目。包括安裝IIS、安裝Python、配置IIS、編寫和部署Python代碼等內容。 一、安裝IIS和Python 在開始進…

    編程 2025-04-28
  • 如何使用TKE來開發Java項目

    本文將從多個方面詳細闡述如何使用TKE(Theia IDE)來進行Java項目的開發。TKE是一個功能強大的在線集成開發環境,提供了大量的工具和插件,讓開發者可以高效地進行Java…

    編程 2025-04-28
  • 如何選擇MySQL服務器文件權限

    MySQL是一種流行的關係型數據庫管理系統。在安裝MySQL時,選擇正確的文件權限是保證安全和性能的重要步驟。以下是一些指導您選擇正確權限的建議。 一、權限選擇 MySQL服務器需…

    編程 2025-04-27

發表回復

登錄後才能評論