Node.js模塊化開發(fā)

JS在使用時(shí)存在兩大問題:文件依賴和命名沖突
在復(fù)用某些js文件時(shí),模塊化使文件不再依賴,抽離某一模塊不會(huì)影響整體,文件與文件之間半封閉,同名變量可以在不同文件間共存。

一、Node.js中模塊化開發(fā)規(guī)范

  • Node.js規(guī)定一個(gè)JS文件就是一個(gè)模塊,模塊內(nèi)部定義的變量和函數(shù)默認(rèn)情況下在外部無法得到;
  • 模塊內(nèi)部可以用exports對(duì)象進(jìn)行成員導(dǎo)出,使用require方法導(dǎo)入其他模塊。

1.1模塊成員導(dǎo)出

//a.js文件
//在模塊內(nèi)部定義變量
let version = 1.0;
const sayHi = name =>`您好,$(name)`;
//向模塊外部導(dǎo)出數(shù)據(jù)
exports.version = version;
exports.sayHi = sayHi;

1.2模塊成員的導(dǎo)入

//b.js文件
//在b.js模塊中導(dǎo)入模塊a
let a = require('./b.js');
//輸出b模塊中的version變量
console.log(a.version);
//輸出b模塊中的sayHi方法并輸出其返回值
console.log(a.sayHi('黑馬講師'));

示例

//a.js
const add = (n1, n2) => n1 + n2;

exports.add = add;
//b.js
const a = require('./03.module-a.js');
console.log(a.add(10, 20));

1.3另一種導(dǎo)入方法

exports是module.exports的別名(地址引用關(guān)系),如果兩個(gè)值不同,導(dǎo)出對(duì)象最終以module.exports為準(zhǔn)
示例

//a.js文件
const greeting = name => `hello ${name}`;
module.exports.greeting = greeting;
//b.js文件
const a = require('./04.module.exports.js');
console.log(a.greeting('zhangsan'));

二、系統(tǒng)模塊

2.1 什么是系統(tǒng)模塊

  • Node運(yùn)行環(huán)境提供的API,因?yàn)檫@些API都是以模塊化的方式進(jìn)行開發(fā)的,所以我們又稱Node運(yùn)行環(huán)境提供的API為系統(tǒng)模塊

2.2 系統(tǒng)模塊fs 文件操作

  • f:file文件,s:system系統(tǒng),文件操作系統(tǒng)
const fs = require('fs');
2.2.1 讀取文件內(nèi)容(帶中括號(hào)的是可選參數(shù))
fs.reaFile('文件路徑/文件名稱' 【,'文件編碼'】,callback);

示例

//1.通過模塊的名字fs對(duì)模塊進(jìn)行引用
const fs = require('fs');

//2.通過模塊內(nèi)部的readFile讀取文件內(nèi)容
fs.readFile('./新建文本文檔.txt', 'utf8', (err, doc) => {
    //如果文件讀取出錯(cuò) err是一個(gè)對(duì)象 包含錯(cuò)誤信息
    //如果文件讀取正確 err是null
    //doc是文件讀取的結(jié)果
    console.log(err);
    console.log(doc);
});
2.2.2 寫入文件內(nèi)容
fs.writeFile('文件路徑/文件名稱','數(shù)據(jù)',callback);

示例(沒有寫入的txt會(huì)自動(dòng)新建一個(gè)txt文件)

const fs = require('fs');
fs.writeFile('./demo.txt', '即將要寫入的內(nèi)容', err => {
    if (err != null) {
        console.log(err);
        return;
    }

    console.log('文件內(nèi)容寫入成功');
})

2.2.3 系統(tǒng)模塊path 路徑操作

  • 為什么要進(jìn)行路徑拼接
    1.不同操作系統(tǒng)的路徑分隔符不統(tǒng)一
    2./public/uploads/avatar
    3.Windows上是\ /
    4.Linux上是/

  • 路徑拼接語(yǔ)法

path.join('路徑', '路徑', ...)
//導(dǎo)入path模塊
const path = require('path');
//路徑拼接
let finialPath = path.join('itcast','a','b','c.css');
//輸出結(jié)果itcast\a\c\c.css
console.log(finialPath);
2.2.4 相對(duì)路徑VS絕對(duì)路徑
  • 大多數(shù)情況下使用絕對(duì)路徑,因?yàn)橄鄬?duì)路徑有時(shí)候相對(duì)的是命令行工具的當(dāng)前工作目錄;
  • 在讀取文件或者設(shè)置文件路徑時(shí)都會(huì)選擇絕對(duì)路徑
  • 可以使用_dirname獲取當(dāng)前文件所在的絕對(duì)路徑,可以得到絕對(duì)路徑之后再通過路徑拼接拼接上文件名

示例

const fs = require('fs');
const path = require('path');
console.log(__dirname);
console.log(path.join(__dirname, 'hellonode.js'));

fs.readFile(path.join(__dirname, 'hellonode.js'), 'utf8', (err, doc) => {
    console.log(err)
    console.log(doc)
});

三、第三方模塊

3.1 什么是第三方模塊

由于第三方模塊通常都由多個(gè)文件組成并且被放置在一個(gè)文件夾中,所以又名為包。

第三方模塊有兩種形式:
  • 以js文件的形式存在,提供實(shí)現(xiàn)項(xiàng)目具體功能的API接口。

npmjs.com:第三方模塊的存儲(chǔ)和分發(fā)倉(cāng)庫(kù)

3.2 獲取第三方模塊

npm(node package manager): node的第三方模塊管理工具

  • 下載:npm install 模塊名稱
  • 卸載:npm uninstall 模塊名稱
全局安裝與本地安裝
  • 命令行工具:全局安裝
  • 庫(kù)文件:本地安裝
3.3 第三方模塊 nodemon

nodemon是一個(gè)命令行工具,用以輔助項(xiàng)目開發(fā)
在Node.js中,每次修改文件都要在命令行工具中重新執(zhí)行該文件

使用步驟

  • 1.使用npm install nodemon -g 進(jìn)行全局安裝
  • 2.在命令行工具中使用nodemon命令代替node命令執(zhí)行文件

nodemon模式下ctrl+c退出

3.4 第三方模塊 nrm

nrm(npm registry manager):npm下載地址切換工具
npm默認(rèn)的下載地址在國(guó)外,國(guó)內(nèi)下載速度慢
使用步驟:

  • 1.使用npm install nrm -g 下載它
  • 2.查詢可用下載地址列表nrm Is
  • 3.切換npm下載地址nrm use 下載地址名稱


    687a39a911bdb9115c2bcf9c247fdb9.png

圖中,前面帶星號(hào)的即是當(dāng)前的默認(rèn)下載地址,使用nrm use taobao即可更改默認(rèn)地址到taobao

3.5 第三方模塊 Gulp

基于node平臺(tái)開發(fā)的前端構(gòu)建工具
將機(jī)械化操作編寫成任務(wù),想要執(zhí)行機(jī)械化操作時(shí)執(zhí)行一個(gè)命令行命令任務(wù)就能自動(dòng)執(zhí)行了

3.5.1 Gulp能做什么
  • 項(xiàng)目上線,HTML、CSS、JS文件壓縮合并
  • 語(yǔ)法轉(zhuǎn)換(es6、less...)【瀏覽器無法識(shí)別less語(yǔ)法】
3.5.2 Gulp使用
  • 1.使用npm install gulp下載gulp庫(kù)文件
  • 2.在項(xiàng)目根目錄下建立gulpfile.js文件【注:此js文件名是固定的】
  • 3.重構(gòu)項(xiàng)目的文件夾結(jié)構(gòu)src目錄放置源代碼文件,新建dist目錄放置構(gòu)建后的文件
  • 4.在gulpfile.js文件中編寫任務(wù)
  • 5.在命令行工具中執(zhí)行g(shù)ulp任務(wù)
3.5.3 Gulp中提供的方法
  • gulp.src():獲取任務(wù)要處理的文件
  • gulp.dest():輸出文件 必須與pipe聯(lián)合使用
  • gulp.task():建立gulp任務(wù) task的第一個(gè)參數(shù)是gulp的任務(wù)名稱,第二個(gè)參數(shù)是回調(diào)函數(shù),自動(dòng)執(zhí)行
  • gulp.watch():監(jiān)控文件的變化
const gulp = require('gulp');
//使用gulp.task()方法建立任務(wù)
gulp.task('first',()=>{
  //獲取要處理的文件
  gulp.src('./src/css/base.css')
  //將處理后的文件輸出到dist目錄
  .pipe(gulp.dest('./dist/css'));
));

安裝gulp命令行工具

npm install gulp-cli -g

安裝以后可以使用類似node的功能:gulp

示例
gulp的文件拷貝操作,gulp的first任務(wù)將./src/css/base.css下的base.css文件復(fù)制到了dist文件夾下的css文件夾

//引用gulp模塊
const gulp = require('gulp');
//使用gulp.task建立任務(wù)
//1.任務(wù)的名稱
//2.任務(wù)的回調(diào)函數(shù)
gulp.task('first', done => {
    console.log('第一個(gè)gulp任務(wù)');i
    //1.使用gulp.src獲取要處理的文件
    gulp.src('./src/css/base.css')
        //gulp可以創(chuàng)建不存在的文件
        .pipe(gulp.dest('dist/css'));
    done();
});
3.6 Gulp插件
  • gulp-htmlmin:html文件壓縮
  • gulp-csso:壓縮css
  • gulp-babel:JavaScript語(yǔ)法轉(zhuǎn)化
  • gulp-less:less語(yǔ)法轉(zhuǎn)化
  • gulp-uglify:壓縮混淆JavaScript
  • gulp-file-include:公共文件包含
  • browsersync:瀏覽器實(shí)時(shí)同步
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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