17-1-Nodejs的學習與使用

JavaScript 模塊化編程

網(wǎng)站越來越復雜,js代碼、js文件也越來越多,會遇到什么問題?

  • 命名沖突;
  • 文件依賴問題。
  • 解決方案:模塊化開發(fā)。

什么是模塊化

  • 代碼模塊化的例子:
  • 日期模塊;
  • 數(shù)學計算模塊;
  • 日志模塊...

模塊化開發(fā)演變

  • 模塊化開發(fā)思想的優(yōu)點:
  • 開發(fā)效率高:一次開發(fā),多次使用;
  • 維護方便:模塊之間有高偶爾低內(nèi)聚的特點。
  • 1~4是關(guān)于命名沖突的問題,5是關(guān)于文件依賴的問題。

1. 全局函數(shù)

  • 命名沖突,代碼可讀性差;
  • 文件依賴的問題。

2. 命名空間-對象封裝

  • 駝峰命名;
  • 用命名空間的方式進行封裝(事先約定命名的規(guī)范的形式);
  • 不能做到私有性封裝,對象里面的屬性和方法很容易被修改掉,很不安全。

3. 劃分私有空間

  • 通過匿名函數(shù)自執(zhí)行的方法封裝模塊;
  • 可以保護私有變量和方法。

4. 模塊的維護擴展

  • 開閉原則,對修改關(guān)閉,對擴展開放。
  • 增加了代碼的健壯性和容錯性。

5. 模塊的第三方依賴(文件依賴)

  • 模塊職責唯一性
  • 把依賴的模塊,通過依賴注入的形式,在你的參數(shù)上進行體現(xiàn),牽強的可以解決文件依賴的問題。

總結(jié)

  • 最大的問題,規(guī)范的問題
  • 如果在多人協(xié)作開發(fā)過程中,會有很大的問題
  • 多人協(xié)作開發(fā)過程中:代碼的風格一定要統(tǒng)一

模塊化規(guī)范

服務(wù)器端模塊化規(guī)范

瀏覽器端模塊化規(guī)范

  • AMD
    • RequireJS:優(yōu)先加載
  • CMD
    • SeaJS:懶加載
  • commonjs:服務(wù)器端的規(guī)范
  • node.js

SeaJS

  • 一個基于CMD規(guī)范實現(xiàn)的模塊化開發(fā)解決方案;

  • 作者:Alibaba 玉伯

  • 官網(wǎng):http://seajs.org/

  • github:https://github.com/seajs/seajs

  • 特性:

  • 簡單友好的模塊定義規(guī)范

  • 自然直觀的代碼組織方式

  • 了解CMD規(guī)范,掌握使用SeaJS類庫構(gòu)建模塊化開發(fā)方式。

基本使用

1.引入 sea.js 庫
2.定義模塊
    define(function(require, exports, module){ 模塊代碼 });
3.依賴模塊
    require(‘模塊id’)
4.暴露接口
    exports
    module.exports
5.啟動模塊系統(tǒng)
    seajs.use(‘模塊id’,function( 模塊對象 ){ 業(yè)務(wù)代碼 });

定義模塊 define

  • 定義模塊 define(function(){})
  • 函數(shù)體內(nèi)的方法屬性都屬于這個方法,對外有封裝性;解決了命名沖突問題,使js代碼有了封裝性;
  • 直接調(diào)用 jQuery 插件等非標準模塊的方法 http://my.oschina.net/briviowang/blog/208587
1.先有規(guī)范,后有實現(xiàn)
2.在CMD規(guī)范中,一個模塊就是一個js文件
3.define 是一個全局函數(shù),用來定義模塊
4.define( factory )
    對象  {}     這種方式,外部會直接獲取到該對象
    字符串  ‘’  同上
    函數(shù)  function( require, exports, module ){ // 模塊代碼 }
        為了減少出錯,定義函數(shù)的時候直接把這三個參數(shù)寫上,而且順序不能調(diào)換

加載模塊 require

  • 加載文件依賴、模塊依賴的,用于define函數(shù)體內(nèi)。
1.require(‘模塊id路徑字符串’)
    用于根據(jù)一個模塊id加載該模塊
    參數(shù)必須是一個字符串
    該方法會得到 要加載的模塊中的 module.exports 對象
2.只能在模塊環(huán)境define中使用,define(factory)的構(gòu)造方法第一個參數(shù)必須命名為 require
3.不要重命名require函數(shù)或者在任何作用域中給 require 重新賦值

暴露接口 exports 和 module.exports

  • module.exports曝露出一個完整的對象,只能扔一次,只能曝露出來一個;
  • exports是module.exports的別名,可以用來單個屬性、方法、對象的曝露,用.的形式,exports能做的事情module.exports也可以做
1.功能:通過給exports或module.exports動態(tài)的掛載變量、函數(shù)或?qū)ο螅獠繒@取到該接口;
2.exports 等價于 module.exports;
3.可以通過多次給exports 掛載屬性向外暴露;
4.不能直接給 exports 賦值;
5.如果想暴露單個變量、函數(shù)或?qū)ο罂梢酝ㄟ^直接給 module.exports 賦值 即可。

啟動模塊 seajs.use

  • 加載入口模塊,我們把define定義的js就叫模塊;
  • 這個用于在html代碼里面的加載。
1.在調(diào)用 seajs 之前,必須先引入 sea.js 文件
2.通過 seajs.use() 函數(shù)可以啟動模塊,有三種形式
    (‘模塊id’[,callback] )    加載一個模塊,并執(zhí)行回調(diào)函數(shù)
    ( [ ‘模塊1’, ‘模塊2’ ]  [, callback] )  加載多個模塊,并執(zhí)行回調(diào)函數(shù)
    callback 參數(shù)是可選的
    其中,回調(diào)函數(shù)中的參數(shù)用來接收通過exports返回來的值
3.seajs.use 和 DOM ready 事件沒有任何關(guān)系
4.最好不要在 define 中 使用 seajs.use

其它

模塊標識
  • 模塊標識就是一個字符串,用來標識模塊;
  • 模塊標識可以不包含后綴名 .js
  • ./../ 開頭的相對路徑模塊,相對于 require 所在模塊的路徑;
  • 不以 ./../ 開頭的頂級標識,會相對于模塊的基礎(chǔ)路徑解析(配置項中的base
  • 絕對路徑:http://127.0.0.1:8080/js/a.js
  • 相對路徑:/js/a.js
高級配置SeaJS
屬性 說明
<span style="color:red">alias</span> 別名配置
<span style="color:red">paths 路徑配置
vars 變量配置
map 映射配置
preload 預(yù)加載項
debug 調(diào)試模式
<span style="color:red">base 基礎(chǔ)路徑
charset 文件編碼

requirejs

  • 與seajs的區(qū)別:
  • requirejs是優(yōu)先加載的;
  • seajs是懶加載的,就是有拖延癥,用的時候才加載。
  • 官方文檔:http://www.requirejs.cn/

node-lesson1

1.前端、后端都是干什么的?

  • 前端:做靜態(tài)資源的,html、css、js、圖片;
  • 后端:操控服務(wù)器的硬件的。

2.為什么學習node.js?

  • 1.就業(yè)有市場;
  • 2.有商業(yè)用途;
    國內(nèi)一些創(chuàng)業(yè)公司用用的比較多,功夫熊(做上門保健的,美甲、按摩)
    國外的一些大公司都有使用:Facebook、Twitter、Google
    國內(nèi)的一些大公司:Alibaba(天貓所有的頁面都是通過Node提供的服務(wù))、Tencent、Baidu
  • 3.本身技術(shù)是有價值;
  • 4.js開發(fā)。

3.什么是JavaScript?

  • 一門腳本語言,需要嵌入html執(zhí)行。

4.瀏覽器中的JavaScript可以做什么?

  • 校驗表單、操作dom等等

5.瀏覽器中的JavaScript不可以做什么?

  • 操作服務(wù)器硬件。

6.瀏覽器與JavaScript是什么關(guān)系?

  • 瀏覽器解析js,目的是為了讓計算機能看懂js(計算機看得懂01010101,機器碼、字節(jié)碼);

  • 這個過程叫做編譯。

  • 實際上是內(nèi)核(js引擎)去解析的:

引擎
    1.轉(zhuǎn)化
        汽油柴油等等--->轉(zhuǎn)化->成動能
        模板+數(shù)據(jù)--->頁面
        js代碼--->機器碼\字節(jié)碼
    2.移植性
        js引擎套一個殼子就是瀏覽器,寫js代碼傳給js引擎,可以操作硬件,這一套技術(shù)就構(gòu)成了node.js
        node.js使用v8引擎去解析js(不在需要去考慮兼容性問題了)

7.JavaScript只可以運行在瀏覽器中嗎?

  • 可以運行在瀏覽器中;
  • 也可以運行在node中(因為使用了v8引擎)。

JavaScript的實現(xiàn)方式

瀏覽器 JavaScript實現(xiàn)方式
Firefox SpiderMoney
IE JScript
Safari JavaScriptCore
Chrome V8
Microsoft Edge ChakraCore

什么是 Node?

1.Node.js是一個在瀏覽器之外可以解析和執(zhí)行JavaScript代碼的運行時環(huán)境,或者說是一個運行時平臺JavaScript是門語言,node是一門技術(shù);
2.Node.js的特性:無阻塞IO模型、事件驅(qū)動;
3.Node.js通常用來構(gòu)建提供實時服務(wù)的應(yīng)用程序。
  • Node.js參考。

  • node是js運行環(huán)境基于v8引擎的一個運行時;

  • 特點:用事件驅(qū)動、無阻塞的io模型

  • 優(yōu)勢:輕量、高效。

    • 輕量級也就意味著 運行速度快;
    • 輕量級也就意味著有更好的 跨平臺 特性(平臺的差異性,兼容性);
  • node是門技術(shù)不是語言,它使用的語言是js

  • java --> java

  • .net --> c#

  • node --> js

  • Node.js 是一個 構(gòu)建于 谷歌 Chrome 瀏覽器的 V8 引擎之上的一個 JavaScript運行時 環(huán)境。

    • Node.js可以解析和執(zhí)行 JavaScript 代碼。
  • Node.js的事件驅(qū)動和非阻塞IO模型使得Node.js本身非常的輕量和高效;
  • Node.js' package ecosystem, npm, is the largest ecosystem of open source libraries in the world.

    • 以前的客戶端中 JavaScript 庫 散列在互聯(lián)網(wǎng)的各個地方;
    • npm 就是把大家經(jīng)常使用的一些開源庫 給組織到了一起。
  • Node 是一個可以解析和執(zhí)行 JavaScript 代碼的 運行時環(huán)境。

  • 關(guān)于Node

1.可以在服務(wù)器端使用JavaScript了
2.統(tǒng)一了開發(fā)環(huán)境和語言,JavaScript無處不在
3.高性能的JavaScript引擎 – Google V8
4.誕生于2009年,由Ryan Dasl 發(fā)布,并且是開源的
5.Node.js同時支持Windows、Linux、Mac OSX

為甚嚒要學習node

  • 全棧開發(fā)工程師

  • 技能全面、學習能力強、溝通成本低、學習成本高;

  • 掌握多種技能,獨立完成產(chǎn)品。

  • 前端開發(fā)

  • html、css、JavaScript、jQuery、Angular、前端優(yōu)化、自動化框架等。

  • 后端開發(fā)

  • Node.js構(gòu)建后臺服務(wù)。

  • 移動端開發(fā)

  • HTML5、ionic、React native、微信等。。。

Node 的實現(xiàn)結(jié)構(gòu)

  • V8 JavaScript 解析執(zhí)行引擎,ECMAScript;
  • 中間層(提供了文件操作、網(wǎng)絡(luò)操作登陸接口)更加接近操作系統(tǒng)的接口供開發(fā)人員使用
  • 硬件層

安裝與配置

3m安裝法 nvm npm nrm

安裝包的方式安裝

  • 問題1:安裝了node 沒有卸載;
  • 問題2:32和64搞混了;
  • 問題3:拼寫錯誤,路徑錯誤;
  • 下載地址:
  • 一路下一步 next
  • 如何確認是否安裝成功:
    • win + r ,然后輸入 cmd ,然后敲回車 就可以進入 cmd 控制臺

nvm 安裝和管理我們的 Node.js版本

nvm的安裝方式,node.js version manager 是一個node的版本管理工具
為了解決node版本切換問題
右鍵在此電腦上點擊一下--》屬性---》系統(tǒng)---》高級系統(tǒng)設(shè)置---》環(huán)境變量
控制面板---》系統(tǒng)---》高級系統(tǒng)設(shè)置---》環(huán)境變量
NVM_HOME---C:\dev\nvm
NVM_SYMLINK--C:\dev\nodejs
新建一個path:%NVM_HOME%;%NVM_SYMLINK%
nvm 用法
nvm list 查看版本號
nvm use 版本號、nvm use 版本號 32 用哪個版本(已經(jīng)下載過的版本)
nvm install 版本號、nvm install 版本號 32 下載相對應(yīng)版本

nvm下載的是二進制版本

控制臺基本使用

  • 允許用戶可以在終端命令臺中與操作系統(tǒng)交互,其實就是輸入與輸出。
基本命令 說明
dir directory列出當前目錄下所有的條目,別名 ls 在 powershell 中可以使用
cd change directory 切換目錄
mkdir、md make directory創(chuàng)建一個文件夾
rd remove directory刪除文件夾
del delete刪除指定文件夾
ren rename改變文件名
cls clear screen清屏

path 環(huán)境變量

  • 目的是為了在控制臺中的任何目錄都可以快速打開或者使用該可執(zhí)行文件;

  • 環(huán)境變量就是用來存儲系統(tǒng)級別的變量;

  • 添加環(huán)境變量

    • 我的電腦 -> 右鍵選擇屬性 -> 高級系統(tǒng)設(shè)置 -> 切換到高級面板 -> 環(huán)境變量
    • 第一種方式:直接把可執(zhí)行文件所屬的目錄 放到 PATH 環(huán)境變量中(如果沒有PATH環(huán)境變量,自己新建)
    • 第二種方式:新建一個環(huán)境變量,變量名規(guī)范:邏輯名_HOME 變量值:該可執(zhí)行文件所屬的目錄
    • 注意:無論是直接添加的路徑還是引用的變量名,一定要用 英文的分號 區(qū)分開
    • 引用變量名的時候,變量名兩邊都是 %
  • > feiq

    • 當你在控制臺中輸入一個程序的名字的時候,cmd默認把它當成一個可執(zhí)行文件去執(zhí)行了,優(yōu)先找當前目錄下是否有沒有一個叫做feiq.exe的可執(zhí)行文件,如果有,直接執(zhí)行打開;
    • 如果沒有,cmd會進入 path 環(huán)境變量中一個目錄一個目錄的挨著查找里面是否有該可執(zhí)行文件。

REPL(Read-eval-print-loop) 運行環(huán)境

  • 用來測試一下代碼的,repl和chrome的控制臺很像;
  • 通過在控制臺中輸入 node 敲回車就可以計入 REPL 運行環(huán)境;
  • 通過在REPL運行環(huán)境中,連續(xù)按兩次 Ctrl+C 就可以退出 REPL 運行環(huán)境。

用node執(zhí)行js文件

  • 在js文件當前目錄下---->node +文件名;
  • 如果不在當前目錄下,node + 文件路徑的形式執(zhí)行:
  • 相對路徑:./當前路徑,../上級目錄
  • 絕對路徑執(zhí)行js的方式:node c:\Users\cena\Desktop\code\01helloworld.js。

Globals

global

  • global表示Node所在的全局環(huán)境,類似于瀏覽器的window對象;
  • 使用REPL環(huán)境查看global對象;
  • 注意:在REPL中定義的變量默認就是全局;
  • 總結(jié):
  • global就表示Node中的全局命名空間,任何全局變量、函數(shù)或?qū)ο蠖际莋lobal的一個屬性;
  • 在一個模塊中定義的變量、函數(shù)或方法只在該模塊中可用,但可以通過exports對象將其傳遞到模塊外部。

console(測試用)

斷言
  • 斷言就是假定一個條件,如果條件成立則不輸出任何內(nèi)容,如果條件不成立則報錯還要輸出想要輸出的內(nèi)容。
console.assert(條件,條件不成立輸出的內(nèi)容);
var foo=3;
console.assert(foo==3,"失敗");
time()、timeEnd()
  • 成對出現(xiàn),計算在兩個方法中間的代碼的運行時間,傳入的參數(shù)要一致。
console.time('test');
    //code
console.timeEnd('test');
//參數(shù)幫我們記錄代碼的執(zhí)行時間

__dirname 和 __filename

  • __dirnamee:用來找到當前文件夾的路徑;;

  • __filename:用來去到當前文件的全路徑。

  • 不知道代碼要才哪使用的時候,用于靈活的寫代碼取路徑的時候。
    它們屬于模塊作用域,可以直接使用
    它們兩個用來獲取路徑的,一般用于操作文件路徑的時候,才會用到

process

  • process 是一個全局可用對象,用來和我們現(xiàn)在啟動中的node進行交互的。
指令 說明
process.version 取版Node的版本,比如v0.10.18
process.stdout.write(123123) 在控制臺做標準輸出
process.pid 當前進程的進程號
process.platform 當前系統(tǒng)平臺,比如Linux
process.env 指向當前shell的環(huán)境變量,比如process.env.HOME
process.stdout 指向標準輸出
process.stdin 指向標準輸入
process.stderr 指向標準錯誤

fast-init

  • 額外補充(裝逼用),可以通過命令行,快速加載已寫好的模板。
  • 如需使用,請額外查文檔。

補充angular知識

  • 如果定義一個controller為parentController;
  • 里面還有一個controller,叫selController;
  • 父控制器向子控制器傳值(內(nèi)容),使用$scope.broadcast("事件名","內(nèi)容");
  • 子控制器向父控制器傳內(nèi)容使用$scope.emit("事件名","內(nèi)容");

模塊系統(tǒng)

node.js模塊化

一個js文件在node里面我們就理解為一個模塊;
require用來加載模塊;(都要使用相對路徑)
module.exports用來曝露屬性和方法的,因為模塊有封裝性,需要打破封裝性曝露方法和屬性來;
exports是module.exports的別名,exports可以做的事情,module.exports都可以做,exports只能用.的形式曝露屬性和方法。

模塊的種類

  • 在Node.js中,模塊分為兩類:
第一類,核心模塊(原生模塊),node自帶,用`名稱`直接可以加載。
    核心模塊:
     fs:file system
        異步讀文件:readFile(路徑,編碼,function(){});
        同步讀文件:readFileSync(路徑,編碼格式);
     http
     os
     path
     querystring
     url
     ...
第二類,文件模塊,用路徑加載;有一種特殊的文件模塊----->包,`可以用名字加載`。
  • module 是一個全局對象,它的作用是存儲模塊信息的,每一個js是一個模塊,每一個模塊里面都有一個module,module里面還存儲了父子結(jié)構(gòu)。可以直接給module.exports賦值,但是給exports直接賦值是無效的,用屬性的形式去賦值的時候二者都有效。

2.2 優(yōu)先從緩存加載

common.js規(guī)范----->加載后,再次加載時,去緩存中取 module.exports

2.3 require參數(shù)解析

核心模塊是Node.js原生提供的加載核心模塊的時候,
不需要傳入路徑,因為Node.js已經(jīng)將核心模塊的文件代碼
編譯到了二進制的可執(zhí)行文件中了
在加載的過程中,原生的核心模塊的優(yōu)先級是是最高的

圖參數(shù)解析

  • ./../ 開始的相對路徑文件模塊

    • 在加載一個自己編寫的模塊的時候,最好使用__dirname 和 你要加載的模塊的文件名拼接。
  • /開始的絕對路徑文件模塊

1.在Linux或者MAc的操作系統(tǒng)中,/表示系統(tǒng)的根路徑
2.在Windows中,/表示當前文件模塊所屬的根磁盤路徑
3.不建議使用,了解
  • 標識符中可以不包含擴展名
  • Node會按照.js、.node、.json的次序補足擴展名,依次嘗試,但是不建議省略,提高效率。
require不包含擴展名的時候,Node.js會按照
路徑.js     以后自己在加載js文件模塊的時候,就省略掉.js后綴就可以了
路徑.node   后綴為node的文件是c/c++寫的一些擴展模塊
路徑.json   如果是加載json文件模塊,最好加上后綴.json,能稍微的提高一點加載的速度

.json文件最終Node.js也是通過fs讀文件的形式讀取出來的,然后通過JSON.parse()轉(zhuǎn)換成一個對象

Node.js會通過同步阻塞的方式看這個路徑是否存在
依次嘗試,直到找到為止,
如果找不到,報錯
  • require 加載包的時候
直接寫包名,先在包內(nèi)的node_modules,
目錄下查找,去父級目錄下的node_modules目錄下查找,如果找到就直接使用;否則
依次向上查找,直到根目錄。

參考文獻

3.包

  • 還有一種特殊的文件模塊,其實就是包。
  • 現(xiàn)象:你開發(fā)的一個功能模塊,還是以文件的形式散列的,你給別人使用的時候很麻煩。
  • 包的作用:在模塊的基礎(chǔ)上進一步組織JavaScript代碼。

3.1 包的組成

包結(jié)構(gòu):
  • 入口文件index.js;

  • 包描述文件package.json:

    • name:包的名稱;

    • description:包的簡介;

    • version:包的版本號;

    • keywords:關(guān)鍵詞數(shù)組,用于npm中分類搜索;

    • author:包的作者;

    • main:配置包的入口,默認是模塊根目錄下的index.js;(可以修改,main和外面的入口文件一起修改)

    • dependencies:包的依賴項,npm會通過該屬性自動加載依賴包。

    • 包名:“版本號”

    • 包名:> +版本號 下載大于某個版本號,npm會下最新版

    • 包名:< +版本號 下載小于某個版本號,npm會下小于這個版本號最新版

    • 包名:<= 小于等于 一定會下你寫的這個版本,除非沒有你寫的這個版本

    • 包名:>= 大于等于 下載最新版

    • 包名:*、" "、X 任意 npm會給你下最新版

    • 包名:~ +版本號 會去下約等于這個版本的最新版,在大版本不變的情況下下一個比較新的版本

    • 包名:^ +版本號 不躍遷版本下載,^2.1.0 npm會下載大版本不變,去下載2.x.x版本里的最近版

    • scripts:指定了運算腳本命令的npm命令行縮寫,例如start。

  • Bin:存放可執(zhí)行二進制文件的目錄;

  • Lib:存放JavaScript代碼的目錄;

  • Doc:存放文檔的目錄;

  • Test:存放單元測試用例的代碼。

  • 其中index.js和package.json兩個文件為必須文件。

package.json的創(chuàng)建
  • 方法一:在當前文件夾下npm init,然后根據(jù)提示填內(nèi)容即可。

  • 方二:通過fast-init(npm install -g fast-init)。

    參考文獻 package.json全字段解析

package.json
  • 包的描述文件package.json文件內(nèi)部就是一個JSON對象,該對象的每一個成員就是當前項目的一項設(shè)置,
    比如name就是項目名稱,version就是項目的版本號。

  • 在模塊的加載機制中,有一個main屬性是非常重要的,它很大意義上決定了包要導出的模塊位置。

  • 所有的包必須要放在node_modules文件夾下,該文件夾和要引用包的文件同級。

npm的基本使用

  • 基于Node.js開發(fā)的包的托管網(wǎng)站;

  • Node.js包管理工具。

  • npm :基于包的規(guī)范實現(xiàn)的一個包管理工具。

  • npm init:初始化一個package.json文件;

  • npm install 包名:安裝一個包

  • 當執(zhí)行npm install的時候,它會自動跑到npm的網(wǎng)站,然后找到該包的github地址,找到之后,下載這個壓縮包,然后在執(zhí)行npm install的當前目錄下找一個叫做node_modules目錄。如果找到,直接解壓這個壓縮包,到node_modules目錄下;如果找不到,則新建一個node_modules目錄,解壓到該目錄。

  • npm install -g 包名:表示全局安裝

    • npm在安裝的時候,在全局設(shè)置了一個安裝目錄,只要是全局安裝就會把包安裝到這個目錄里面去。只要是全局安裝就是安裝命令行工具;
  • npm install 縮寫:npm i

  • 當執(zhí)行npm install的時候,會自動在當前目錄中查找package.json文件;如果找到,找里面的 dependencies 字段,安裝該字段中所有依賴的項;

  • npm docs 包名:

    • 打開包相對應(yīng)的文檔非常有用
  • npm install --save 包名: 生產(chǎn)環(huán)境

    • 縮寫:npm i -S jquery@3.*
  • 咱們以后在做項目的時候,先初始化一個package.json文件,在安裝第三方包依賴的時候,必須使用npm install --save express,添加依賴項到package.json文件中,
    實際就是添加到dependencies字段中;

  • npm install -save-dev 開發(fā)環(huán)境

    • 縮寫:npm i -D jquery@3.*
  • 咱們以后在做項目的時候,先初始化一個package.json文件,
    在安裝第三方包依賴的時候,必須使用npm install --save express,添加依賴項到package.json文件中,
    實際就是添加到devDependencies字段中。

  • npm config set prefix “路徑”:修改全局安裝目錄,不建議使用,建議去文件夾里面改 C:\Users\用戶名 里面有一個 .npmrc文件,去里面改prefix = C:\dev\npm (寫你的路徑);去全局的環(huán)境變量path里把C:\dev\npm 路徑加進去。

  • npm root -g:查看全局包安裝路徑;

  • npm list:查看當前目錄下安裝的所有包;

  • npm list -g:查看全局包的安裝路徑下所有的包;

  • npm uninstall 包名:卸載當前目錄下某個包;

  • npm uninstall –g 包名:卸載全局安裝路徑下的某個包;

  • npm update 包名:更新當前目錄下某個包;

  • npm update –g 包名:更新某個全局工具包;

  • npm update:更新當前目錄下安裝的所有包;

  • npm update –g:更新全局所有的工具包。

npm 這種東西的最終的目的就是:讓你的開發(fā)模式工程化,都依靠工具來管理

nvm npm nrm

3m

   nvm node版本的管理工具
   npm node的包管理工具
   nrm npm的數(shù)據(jù)源管理工具

   npm install -g nrm

4.文件操作

4.1箭頭函數(shù)(ES6語法)

  • 箭頭函數(shù)就是一種語法糖;

  • 語法糖是一種語法,用這種語法能嘗到甜頭,能是編程高效。

  • 當函數(shù)體有一個參數(shù)有返回值的時候

var foo=function(v){ return v;}
//改寫為箭頭函數(shù)
var foo=v=>v;
  • 當函數(shù)體沒有參數(shù)有返回值的時候
var foo=function(){ return v;}
var foo=()=>v;
  • 當函數(shù)體有多個參數(shù)有返回值的時候
var foo=function(v1,v2){ return v1+v2;}
var foo=(v1,v2)=>v1+v2;
  • 當函數(shù)體有多個參數(shù)沒有返回值的時候
var foo=function(v1,v2){
    console.log(v1); console.log(v2);
}
var foo=(v1,v2)=>{
    console.log(v1); console.log(v2);
};

4.2文件讀寫

  • fs.readFile() 讀文件

fs.readFile(file, [options], callback)
//file 讀文件的路徑
//options 用[]包裹的可選參數(shù),object {"encoding":"uft8","flag":"r"} string 'utf8'
//callback function callback函數(shù)里面有兩個參數(shù)
//err表示錯誤對象,如果readFile發(fā)生錯誤了,在callback函數(shù)里面會回返回err,err對象里面存著錯誤信息
//如何讀文件成功,err為null
//data就是讀文件,讀出來的內(nèi)容。

  • fs.access(path,[mode], callback) 用來判斷文件是否存在
    //path 判斷路徑是否正確(也可以判斷文件)'./pic'
    //mode一般不用,默認就可以了,用的話是用來判斷文件是否可讀可寫可執(zhí)行
    //callback 只有一個參數(shù)err,錯,文件有問題

其它

作業(yè)

2.npm 和package.json結(jié)合著連
npm init 初始化package.json
npm install 先配置package.json里的devDependencies dependencies字段
npm i -S +包名 npm install –save 不光能下載包,還能把依賴添加到package.json
npm i -D +包名 npm install –save-dev 不光能下載包,還能把依賴添加到package.json
npm docs 包名 查看包的相關(guān)文件 jquery、mongoose、http-poster
npm list 當前目錄有什么包,檢測node_modules里面有什么
npm install –g 包名 全局安裝 cnpm、nrm
3.cnpm
4.nrm
安裝目錄npm install -g nrm
nrm ls 查看數(shù)據(jù)源
nrm test 測試你的網(wǎng)連那個npm的數(shù)據(jù)源快
nrm use 切換數(shù)據(jù)源
5.閱讀參考文獻 樸靈 require
閱讀參考文獻 package.json全字段解析
6.github自己玩玩

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 參考鏈接: Node.js中文文檔; http://nodejs.cn/api/ 1.1、模塊化。 modul...
    四月天__閱讀 263評論 0 1
  • npmjs.com說:npm能讓javascript開發(fā)人員發(fā)布代碼和復用代碼變得更容易.并別能非常容易的讓別人將...
    _palm閱讀 2,396評論 0 0
  • 創(chuàng)建文件夾,并轉(zhuǎn)到文件夾 2、npm init 生成一份最簡單的package.json 3、npm instal...
    番茄尼個西紅柿閱讀 401評論 0 0
  • Node.js是目前非?;馃岬募夹g(shù),但是它的誕生經(jīng)歷卻很奇特。 眾所周知,在Netscape設(shè)計出JavaScri...
    Myselfyan閱讀 4,189評論 2 58
  • 這兩天累成狗,孩子大四了,考研就夠忙的了,學校里的各種事可謂層出不窮,實習報告,每周總結(jié),還有自身原因?qū)е碌默?..
    鶯溪蝶語閱讀 270評論 2 5

友情鏈接更多精彩內(nèi)容