node.js中gulp簡介與使用

1,node.js簡介

    本質是一種運行執行js程序代碼的方式方法/環境
    之前,我們只能在瀏覽器環境中運行js程序
    現在我們可以在node環境彙總,運行js程序
    node.js環境 是 基於 Chrome V8 引擎的環境,也就是以谷歌瀏覽器內核爲環境,來運行js程序
    			引擎對js程序的作用就像汽油對汽車的作用,就是給動力,在這裏指通過引擎運行js程序

    js程序,在不同的環境下,有不同的功能
        在瀏覽器環境下,受到瀏覽器的限制
            能操作 ECMAScript  DOM  BOM
            不能操作 I/O 數據庫等

        在node.js環境下
            可以操作 ECMAScript I/O 數據庫等,就是指可以操作硬盤文件,編譯輸出時命令行是node demo.js
            														就像python demo.py其他語言編譯運行一樣
            不能操作 DOM   BOM
            
	運行方式很簡單,依靠終端 node demo.js

node.js第三方依賴包的安裝

    (1) , 使用 npm 來進行安裝
          npm 是 node.js 默認給我們安裝好的工具,我們可以直接使用

    (2) , 設定 npm 的下載路徑(鏡像源/鏡像文件),就是把下載地址從國外變爲國內下載
       
        直接設定 推薦的方法

            npm config set registry https://registry.npm.taobao.org 直接設定爲淘寶下載

    (3) , 清除 npm 的下載緩存
        如果上一次下載失敗,會在node.js中有上一次下載的緩存文件
        如果要執行新的下載,node.js默認會從上一次下載的程序中,繼續下載
        就容易造成下載失敗

        如果出現下載失敗的情況,一定要執行清除操作之後,再來進行第二次下載

        一般推薦使用軟清除就可以了
        如果軟清除有問題,再使用硬清除
        千萬注意,硬清除之後,要再執行一次軟清除

        清除 npm 的緩存有兩種方法

        (1) , 通過 命令 來清除緩存  --- 軟清除
            npm cache clear -f
            清除緩存文件

        (2) , 直接清除緩存文件 --- 硬清除
    
            C:\Users\你的用戶名\AppData\Roaming\npm-cache
            這個 npm-cache 文件夾中存儲的就是 緩存文件

            直接刪除這個文件夾,然後再次執行 軟清除
            npm cache clear -f

            注意: AppData 是一個隱藏文件 , 必須要顯示隱藏文件,纔可以看到


    (4) , 依賴包的安裝,分爲兩種形式
        (1), 全局安裝 
            npm i -g 依賴包 --global 可以簡寫成 -g
            npm install --global 依賴包

            全局安裝的依賴包,在任意路徑下,都可以調用使用

        (2), 項目/局部 安裝
            npm i 依賴包 install 簡寫 i 
            npm install 依賴包

            項目/局部安裝的依賴包,只能在安裝路徑下,執行調用

            還有一種安裝語法,比較不常用
            nmp i -D 依賴包

            兩種語法,在使用上沒有任何區別
            只是安裝依賴包信息,在 package.json 中的存儲位置不同
            npm i 依賴包    ---- 存儲在  dependencies 中
            nmp i -D 依賴包 ---- 存儲在  devDependencies 中

        有些 依賴包 必須要 安裝全局的同時,也安裝項目依賴包

gulp安裝與使用

gulp是在node.js中需要下載的依賴包,它主要用於壓縮打包程序,在瀏覽器上運行的都是壓縮後的文件,這樣可以提高瀏覽器的加載速度,這種方法常用於打包項目

操作步驟如下:

   1,建立文件夾目錄
        src   源文件
        dist  壓縮文件

            src中
                pages     HTML文件
                sass      sass文件
                js        未壓縮的js文件
                images    圖片
                radio     音頻
                video     視頻
                lib       壓縮好的js文件

   2,格式化依賴包信息
        npm init -y    格式化成功後會出現 package.json 文件,看下面的特別說明有解釋
           
   3,安裝相應的依賴包
        gulp 的全局依賴包
            npm i -g gulp

        gulp 的項目依賴包
            npm i gulp
		
		以上兩個依賴包全局,局部都要安裝,否則會出錯,無法進行壓縮打包
		
   4,下載相應的打包壓縮規範依賴包
   
       css的
                npm i gulp-cssmin          壓縮依賴包
                npm i gulp-autoprefixer    自動添加前綴依賴包

            js的
                npm i gulp-uglify          打包壓縮ES5語法規範依賴包
                npm i gulp-babel           將其他ES語法規範轉化爲ES5語法規範
                npm i @babel/core          這是兩個和 gulp-babel 配合使用的依賴包
                npm i @babel/preset-env    說白了就是 gulp-babel 的兩個補丁文件,是讓 gulp-babel 能更正確的執行

                下載4個依賴包 只要 加載 兩個依賴包 

            html的
                npm i gulp-htmlmin         html壓縮依賴包
                
            webserver的
                npm i gulp-webserver       webserver依賴包

            del的
                npm i del                  刪除依賴包

下載好依賴包後要創建 gulpfile.js 文件, 文件名稱,必須是這個名稱,一個字母都不能錯,大小寫也不能錯
gulp運行時,只執行 gulpfile.js 文件 , 必須必須必須是這個名稱

   在 gulpfile.js 文件中來定義 你要執行的 程序內容,首先就是先引入依賴包模塊


// 首先引入第三方模塊,gulp模塊
const gulp = require('gulp');

// 導入css文件壓縮相關依賴包
const cssmin = require('gulp-cssmin');

// 添加兼容前綴依賴包
const autoprefixer = require('gulp-autoprefixer');

// 定義的內容,是固定語法形式 有這個定義,自動添加兼容前綴依賴包纔會起作用
// 需要加入到package.json中才會起作用
// "browserslist": [
//     "last 2 versions",   // 兼容 瀏覽器 最新的2個版本, 沒有特別設定的瀏覽器, 就兼容最新的兩個版本
//     "IOS > 7",          //IOS 系統 兼容 7版本以上 
//     "FireFox > 20"      //火狐  瀏覽器 兼容 20版本以上
// ]

// 加載js壓縮相關依賴包
// 打包壓縮ES5規範的依賴包
const uglify = require('gulp-uglify');

// 將其他ES語法轉換爲ES5語法規範依賴包,還有兩個補丁文件,需要下載但不需要加載
// 因爲加載下面的這個那兩個補丁文件就自動加載到gulp-babel裏面了
const babel = require('gulp-babel');

// 加載html打包規範依賴包
const htmlmin = require('gulp-htmlmin');

// 加載內置服務器依賴包
const webserver = require('gulp-webserver');

// 加載sass依賴包
const sass = require('gulp-sass');

// 加載刪除的依賴包
const del = require('del');

// 定義sass的打包規範
const sassHandle = function () {

    return gulp.src('./src/sass/*.scss')
        .pipe(sass())
        .pipe(autoprefixer())
        .pipe(cssmin())
        .pipe(gulp.dest('./dist/css'));
}

// 定義css壓縮規範,利用函數封裝,以返回值的形式定義程序內容
const cssHandle = function () {

    return gulp.src('./src/css/*.css')         // 告訴gulp要壓縮的css文件路徑
        .pipe(autoprefixer())              // 添加前綴
        .pipe(cssmin())                    // 打包壓縮
        .pipe(gulp.dest('./dist/css'))     // 將壓縮的文件移到指定文件夾中保存

}

// 定義js壓縮規範,利用函數封裝,以返回值的形式定義程序內容
const jsHandle = function () {


    return gulp.src('./src/js/*.js')         // 告訴gulp要壓縮的css文件路徑
        .pipe(babel({ presets: ['@babel/env'] }))    // 將其他語法規範,轉化爲ES5語法規範, babel() 中的參數是固定的語法格式
        .pipe(uglify())                     // 打包壓縮js文件
        .pipe(gulp.dest('./dist/js'))     // 將壓縮的文件移到指定文件夾中保存,就是寫入到文件中,有就是添加內容,沒有這個文件就是新建

}

// 定義html壓縮規範
const htmlHandle = function () {

    return gulp.src('./src/pages/*.html')
        .pipe(htmlmin({

            removeAttributeQuotes: true,       //  打包時刪除屬性值上的雙引號
            removeComments: true,              //  刪除程序中的註釋內容
            collapseBooleanAttributes: true,   //  刪除布爾屬性中定義的屬性值
            collapseWhitespace: true,          //  刪除程序中多餘的空格,只刪除標籤之前的空格,標籤內部和內容的空格不會刪除
            minifyCSS: true,                   //  壓縮HTML標籤中的css程序代碼
            minifyJS: true,                    //  壓縮html標籤中的js代碼

        }))
        .pipe(gulp.dest('./dist/pages'))     // 打包好的文件移到指定文件夾保存
}

// 定義服務器執行規範
const webserverHandle = function () {

    return gulp.src('./dist')    // 指定的路徑是壓縮文件的路徑,也就是在服務器上運行的都是壓縮文件,提高頁面中程序的執行效率
        .pipe(webserver({
            host: '127.0.0.1',            // 定義的域名地址,目前使用本地域名地址127.0.0.1
            port: 8000,                   // 定義端口號
            open: './pages/index.html',   // 默認打開執行的網頁,也就是 輸入 127.0.0.1:8080 直接打開的網頁
            livereload: true,             // 熱啓動 當文件內容,代碼,css,js等發生改變時,會自動重新加載頁面,執行效果,不用手動刷新                                       
        }))
}

// 音頻,視頻,圖片等,不打壓縮,直接移動到指定的文件夾位置
// 將所有格式的圖片,都移動到指定的文件夾位置中
// 添加到 watch 監聽中 和 default 默認執行中
const imgHandle = function () {

    return gulp.src('./src/images/*.*')        // 指定要移動的圖片的文件夾位置
        .pipe(gulp.dest('./dist/images'))   // 指定移動到的文件夾位置
}


// 定義刪除規範
const delHandle = function () {

    return del(['./dist']);

}

// 定義監聽規範
const watchHandle = function () {

    // 如果監聽的文件發生改變就立馬重新執行壓縮規範
    gulp.watch('./src/css/*.css', cssHandle);
    gulp.watch('./src/js/*.js', jsHandle);
    gulp.watch('./src/pages/*.html', htmlHandle);
    gulp.watch('./src/sass/*.scss', sassHandle);
    gulp.watch('./src/images/*.*', imgHandle);        // 監聽 圖片 文件  

}

// 定義gulp文件的默認執行程序以及程序的執行順序
// 定義默認執行的程序,定義之後,不用寫 node gulpfile.js 執行程序
// 直接執行 gulp 就可以了,會默認的執行定義的程序內容

// 默認按照順序,執行()中的程序
// 先執行 刪除規範,刪除的是之前,壓縮的文件
// 在執行 同時執行 所有的壓縮規範
module.exports.default = gulp.series(  // 按照順序執行

    delHandle,                    // 第一步,先執行刪除規範
    gulp.parallel(cssHandle, jsHandle, htmlHandle, imgHandle, sassHandle), // 第二步,同時執行所有的壓縮規範,css,html,js等等....
    webserverHandle,  // 設置服務器,會自動打開設定的默認頁面
    watchHandle,                  // 第三步,執行的是監聽規範,隨時監聽源文件的改變

);

特別說明:

   gulpfile.js        我們程序員自動手動定義的文件
                      gulp執行打包壓縮時,會只執行 這個文件名中的打包壓縮程序

   package.json       執行 npm init -y 自動生成的文件
                      其中會存儲 下載使用 依賴包的相關信息
                      是一個非常重要的文件

   package-lock.json  執行 npm 下載安裝依賴包之後 自動生成的文件
                         沒啥大用,但是也要留着,別刪除,之後會用

編譯 sass 文件

            1,單一文件的編譯
                sass 你要編譯的文件 編譯之後的文件名稱    例如:sass demo.scss demo1.css

                可以定義編譯生成的文件的名稱
                但是,源scss文件,每次修改之後,都要再次執行編譯纔會生成新的內容的css文件

            2,單一文件的時時編譯
                sass --watch 你要編譯的sass文件:生成的文件   sass --watch demo.scss:demo1.css 都是文件
                監聽形式,如果源scss文件發生改變,自動生成新的編譯的css文件
                但是,這種語法,只能監聽一個scss文件

            3,時時監聽一個文件夾,多文件的時時編譯
                sass --watch 你要編譯的sass文件夾:生成的文件夾
                不能定義文件名稱的,生成與源文件,文件名相同,文件類型不同的css文件
                
        說明:
            map文件的作用  
                map 稱爲映射 
                map 文件是映射生成的代碼的位置,表示原文件中代碼的所在的行數

                實際項目中,後代代碼調試,有可能造成sass文件代碼與對應的css代碼的行數不同

                map映射文件,是爲了在控制檯中,顯示css樣式是在 sass 文件中的源碼位置

            所謂的映射:
                映射概念是 計算機編程中,常見的一個名詞

                我們之前也接觸過,類似映射的概念

                數組a 是 [1,2,3,4,5]  
                
                將數組a中所有的數據,數值乘以2,形成一個新的數組b

                數值b 是 [2,4,6,8,10] 

                數組b,就是數組a的映射

                通俗得講,所謂的映射,就是將 A 通過 一定的規範 轉化生成 B
                那麼 B 就是 A 的映射

sass在gulp中的使用方法

    首先下載 相關的依賴包
        下載sass依賴包,將 sass 語法編譯爲 css語法
        依賴包要下載爲項目形式,也就是sass與gulp一樣,要有全局和項目的兩個依賴包

        全局的 sass        平時編譯使用的
        npm i -g sass

        項目的 gulp-sass   打包壓縮使用的
        npm i gulp-sass   常用這種方法,如果出錯可以使用下面這種方法

        下載gulp-sass時,有可能出現問題

            1,使用的是 taobao 地址,但是因爲現在 taobao 地址下載 gulp-sass會有問題,需要新增地址
              需要新增 gulp-sass專用下載地址

              set SASS_BINARY_SITE=https://npm.taobao.org/mirrors/node-sass/
            
              如果 taobao 不能下載 gulp-sass 直接執行這個命令
              在 taobao 地址中,新增一個 gulp-sass 專用的下載地址
              
            2,如果還是報錯,不行,就需要做另外的操作了
              (1) 下載一個 node-sass 全局作用域
                npm i -g node-sass

              (2) 再下載安裝 gulp-sass 項目作用域的
                npm i gulp-sass

sass在gulp中的代碼在上面,有需要可以參考

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章