zoukankan      html  css  js  c++  java
  • Node开发--->3_node模块化开发之第三方模块

    3. 第三方模块

    3.1 什么是第三方模块

    包=第三方模块

    第一种存在形式类似于jQuery

    3.2 如何获取第三方模块

    • npmjs.com这个网站提供了一个命令行工具:npm
    • 其实npm本身也是一个第三方模块,但是由于每一个开发者都需要使用这个模块,所以按照nodejs的时候,就已经安装了。
    • 下面就是要使用npm去下载第三方模块了,使用方法:

    formidable模块默认下载到命令行工具的默认目录下,即E:Web开发13_Nodejslesson1>
    之后,上述目录下出现文件夹node_modules和文件package-lock.json



    此时文件夹中就没有文件夹node_modules了

    上述安装都属于本地安装
    本地安装:将模块下载到当前的项目中,供当前的项目使用
    全局安装:将模块安装到一个公共的目录中,所有的项目都可以使用这个模块

    3.3 nodemon第三方模块


    -g:是指全局安装
    输入:nodemon .1.helloworld.js

    修改01.helloworld.js的文件内容,在报错文件后,又自动执行保存后的文件


    ctrl+C之后退出,又返回原先的目录

    3.4 nrm第三方模块

    nrm:可以快速切换npm的下载地址
    npm默认的下载地址在国外,下载慢
    为了提高下载速度有的公司建立专门的服务器,用于存储node的第三方模块,完全可以代替官方的下载地址

    3.5 Gulp第三方模块

    Gulp可以做什么?

    • 线上项目:html,js,css文件压缩合并
    • 语法转换:es6转es5,less转css
    • 公共文件抽离:抽取网站中的公共部分,比如:网站的头部,将头部代码抽取到公共文件以后,如果头部有变换,只需要修改这个抽取来的文件就可以了,不需要修改全部包含头部代码的文件
    • 修改文件,浏览器自动刷新

    使用步骤

    具体操作流程

    (1)在lesson1文件夹中新建文件夹gulp-demo

    (2)在命令行中切换到gulp-demo 文件夹下

    (3)npm install gulp安装库文件(gulp是一个库文件,是本地下载,所以不加-g)

    (4)gulp-demo就是项目的根目录,在该目录下建立gulpfile.js文件(gulpfile.js这个文件名不可以随意更改)

    (5)新建文件夹src放置源文件(提前准备好了,里面的代码都是开放过程的代码,即没有被压缩过的)

    (6)在gulpfile.js中编写任务之前要了解gulp中准备好的方法:

    • gulp.src()获取任务要处理的文件
    • gulp.dest()输出文件:由于获取到的文件都是在内存RAM中,要在内存中去处理这些文件,处理完之后要输出到硬盘的某一个目录下,本案例的目录就是disc目录
    • gulp.task()建立gulp任务
    • gulp.watch()监控文件的变化
    • 代码示例

    (7)在gulpfile.js中编写第一个任务

    // 引用gulp模块
    const gulp = require('gulp');
    
    // 使用gulp.task建立任务
    // 1.参数1任务的名称
    // 2.参数2任务的回调函数
    gulp.task('first', () => {//这就是一个单纯的文件复制任务
        console.log('我们人生中的第一个gulp任务执行了');
        // 1.使用gulp.src获取要处理的文件
        gulp.src('./src/css/base.css')
            .pipe(gulp.dest('dist/css'));
        //这里不可以直接写gulp.dest('dist/css'),因为gulp.dest()也是对文件处理的一种方式
        //硬性要求:将要处理的代码写在pipe中
        //gulp.dest('dist/css')就算是dist文件夹下没有css文件夹,那么就会自动创建css文件夹
    });
    

    (8)执行第一个任务
    若用node命令执行gulpfile.js,那么执行的是整个文件,现在需要执行的是当前这个文件的first任务。gulp这个第三方模块除了给我们提供了库文件以外,还为我们提供了一个同名的命令行工具,可以用这个命令来执行某一个任务。先下载

    运行:有报错

    原因:这是gulp4.0版本使用task时,回调函数使用匿名函数带来的问题,gulpgulp不再支持同步任务。解决方案有很多具体参考https://www.gulpjs.com.cn/docs/getting-started/async-completion/
    比较简单的方法就是 添加callback,来指示函数完成,修改代码如下:

    // 引用gulp模块
    const gulp = require('gulp');
    
    // 使用gulp.task建立任务
    // 1.参数1任务的名称
    // 2.参数2任务的回调函数
    gulp.task('first', (callback) => {//这就是一个单纯的文件复制任务
        console.log('我们人生中的第一个gulp任务执行了');
        // 1.使用gulp.src获取要处理的文件
        gulp.src('./src/css/base.css')
            .pipe(gulp.dest('dist/css'));
        //这里不可以直接写gulp.dest('dist/css'),因为gulp.dest()也是对文件处理的一种方式
        //硬性要求:将要处理的代码写在pipe中
        //gulp.dest('dist/css')就算是dist文件夹下没有css文件夹,那么就会自动创建css文件夹
        callback();
    });
    

    运行后不报错:

    gulp中的插件

    gulp中提供的方法非常少,所有的其他功能都是通过插件的方式实现,常用插件如下:

    插件使用的过程:下载、引入、调用

    (9)执行第二个任务:html文件压缩
    使用gulp-htmlmin插件

    • 在www.npmjs.com网站中搜索gulp-htmlmin
    • 查找到安装方法
    $ npm install --save gulp-htmlmin//在最新的npm版本中参数save没有作用
    
    • 在命令行中复制上述代码进行插件下载
    • 引用:
    const htmlmin = require('gulp-htmlmin');
    

    执行第二个任务:

    const htmlmin = require('gulp-htmlmin');
    // html任务
    // 1.html文件中代码的压缩操作
    gulp.task('htmlmin', (callback) => {
        gulp.src('./src/*.html') //*.html表示所有html文件
            // 压缩html文件中的代码
            .pipe(htmlmin({ collapseWhitespace: true })) //collapse折叠;Whitespace空格
            .pipe(gulp.dest('dist'));
        callback();
    });
    

    运行:

    之和会发现在dist目录下包含有压缩的html文件article.html和default.html

    (10)执行第三个任务:抽取html文件中的公共代码
    使用gulp-file-include插件

    • 在www.npmjs.com网站中搜索gulp-file-include
    • 查找到安装方法
    npm install --save-dev gulp-file-include//在最新的npm版本中参数save没有作用
    
    • 在命令行中复制上述代码进行插件下载
    • 引用:
    const fileinclude = require('gulp-file-include');
    
    • 抽取:
      在src文件夹下:新建common文件夹,存储公共代码;并在common文件夹下新建header.html文件;将article.html和default.html的头部都删除,剪切到header.html中.
    • 引回:
      为了将头部引回上述html两个文件,src中在两个html文件头部原先的位置中添加代码:
    <!-- 引入头部:路径是相对于当前文件所在位置 -->
    @@include('./common/header.html')
    

    执行第三个任务:

    const fileinclude = require('gulp-file-include');
    // html任务
    // 2.抽取html文件中的公共代码
    gulp.task('htmlmin', (callback) => {
        gulp.src('./src/*.html') //*.html表示所有html文件
            //抽取公共代码(在压缩之前)
            .pipe(fileinclude())
            // 压缩html文件中的代码
            .pipe(htmlmin({ collapseWhitespace: true })) //collapse折叠;Whitespace空格
            .pipe(gulp.dest('dist'));
        callback();
    });
    

    运行:

    之后会发现在dist目录下压缩的html文件(article.html和default.html)都有了头部

    (11)执行第四个任务:css任务【less语法转换】
    使用gulp-less插件进行语法转换

    • 在www.npmjs.com网站中搜索gulp-less
    • 查找到安装方法
    npm install gulp-less
    
    • 在命令行中复制上述代码进行插件下载
    • 引用:
    var less = require('gulp-less');
    
    • 新建less文件:
      在src文件夹下的css文件夹下建立a.less文件
    .headers {
    	 100px;
    	.logo {
    		height: 200px;
    		background-color: red;
    	}
    }
    

    执行第四个任务:

    const less = require('gulp-less');
    // css任务
    // 1.less语法转换
    gulp.task('cssmin', (callback) => {
        // 选择css目录下的所有less文件以及css文件
        gulp.src('./src/css/*.less')
            // 将less语法转换为css语法
            .pipe(less())
            // 将处理的结果进行输出
            .pipe(gulp.dest('dist/css'))
        callback();
    });
    

    运行:

    之后会发现在dist目录下的css文件夹中就出现了a.css文件

    .headers {
       100px;
    }
    .headers .logo {
      height: 200px;
      background-color: red;
    }
    

    (12)执行第五个任务:css任务【csa代码压缩】
    使用gulp-csso插件进行代码压缩

    • 在www.npmjs.com网站中搜索gulp-less
    • 查找到安装方法
    npm install gulp-csso --save-dev
    
    • 在命令行中复制上述代码进行插件下载
    • 引用:
    var csso = require('gulp-csso');
    

    const less = require('gulp-less');
    const csso = require('gulp-csso');
    执行第五个任务:

    const less = require('gulp-less');
    // css任务
    // 1.less语法转换
    // 2.css代码压缩
    gulp.task('cssmin', (callback) => {
        // 同时选择css目录下的所有less文件以及css文件
        gulp.src(['./src/css/*.less', './src/css/*.css'])
            // gulp.src('./src/css/*.less')
            // 将less语法转换为css语法
            .pipe(less())
            // 将css代码进行压缩
            .pipe(csso())
            // 将处理的结果进行输出
            .pipe(gulp.dest('dist/css'))
        callback();
    });
    

    运行:

    之后会发现在dist目录下的css文件夹中的css文件都被压缩了

    (13)执行第六个任务:js任务【es6代码转换】
    使用gulp-babel插件进行es6代码转换

    • 在www.npmjs.com网站中搜索gulp-babel
    • 查找到安装方法(这里选用版本7)
    # Babel 7
    $ npm install --save-dev gulp-babel @babel/core @babel/preset-env
    //npm可以同时下载多个模块,模块间用空格隔开
    //@babel/core模块和 @babel/preset-env模块是gulp-babel模块所依赖的模块
    
    # Babel 6
    $ npm install --save-dev gulp-babel@7 babel-core babel-preset-env
    
    • 在命令行中复制上述代码进行插件下载
    • 引用:
    const babel = require('gulp-babel');
    
    • 在src文件夹的js文件夹下新建base.js,写上es6相关语法:
    const x = 100;
    let y = 200;
    const fn = () => {
    	console.log(1234);
    }
    

    执行第六个任务:

    const babel = require('gulp-babel');
    // js任务
    // 1.es6代码转换
    gulp.task('jsmin', (callback) => {
        gulp.src('./src/js/*.js')
            .pipe(babel({
                // 它可以判断当前代码的运行环境 将代码转换为当前运行环境所支持的代码
                presets: ['@babel/env']
            }))
            .pipe(gulp.dest('dist/js'))
        callback();
    });
    

    运行:

    之后会发现在dist目录下的js文件夹中的base.js文件是es5代码:

    "use strict";
    
    var x = 100;
    var y = 200;
    
    var fn = function fn() {
      console.log(1234);
    };
    

    (14)执行第七个任务:js任务【js代码压缩】
    使用gulp-uglify插件进行代码压缩

    • 在www.npmjs.com网站中搜索gulp-less
    • 查找到安装方法
    npm install --save-dev gulp-uglify
    
    • 在命令行中复制上述代码进行插件下载
    • 引用:
    var uglify = require('gulp-uglify');
    

    执行第七个任务:

    const babel = require('gulp-babel');
    // js任务
    // 2.代码压缩
    gulp.task('jsmin', (callback) => {
        gulp.src('./src/js/*.js')
            .pipe(babel({
                // 它可以判断当前代码的运行环境 将代码转换为当前运行环境所支持的代码
                presets: ['@babel/env']
            }))
            .pipe(uglify())//压缩
            .pipe(gulp.dest('dist/js'))
        callback();
    });
    

    运行:

    之后会发现在dist目录下的js文件夹中的js文件都被压缩了

    (15)执行第八个任务:复制文件夹
    目标将src文件夹下的lib和images文件夹复制到dist中

    // 复制文件夹
    gulp.task('copy', (callback) => {
    
        gulp.src('./src/images/*')
            .pipe(gulp.dest('dist/images'));
    
        gulp.src('./src/lib/*')
            .pipe(gulp.dest('dist/lib'))
    
        callback();
    });
    

    运行:

    之后发现,dist文件夹中有了lib和images文件夹

    到目前为止编写的任务让构建后的项目成功运行,但是有一个小问题:上述任务是分别编写的,执行时也是分别执行,下面提出一个方法:执行一个任务,其他的任务都可以一起被执行:

    // 构建任务
    gulp.task('default', ['htmlmin', 'cssmin', 'jsmin', 'copy']);
    

    运行该任务:报错


    原因:进入官方文档查看,官方的意思是,4.0.0版本的,“default”右边两个参数放在gulp.series()的参数中,否则会报错
    修改代码:

    // 构建任务
    // gulp.task('default', ['htmlmin', 'cssmin', 'jsmin', 'copy']);
    gulp.task('default', gulp.series(['htmlmin', 'cssmin', 'jsmin', 'copy']));
    

    运行:

    注意命令: gulp default等效于 gulp

  • 相关阅读:
    如何快速查看archlinux pacman 软件记录?
    如何快速判断检查主机ip端口是否存活?
    如何在不清楚有哪些tag的情况下拉取docker镜像?
    如何使用docker版Openresty测试框架Test::Nginx进行测试?
    .net mvc4 使用 System.Web.Optimization 对javascript和style的引入、代码合并和压缩的优化(ScriptBundle,StyleBundle,Bund
    zen coding de 一些快捷功能
    C# Xpath
    一个SQL SERVER查询分析器非常好用的工具
    探索MSSQL执行计划
    博客园武林人士
  • 原文地址:https://www.cnblogs.com/deer-cen/p/12524346.html
Copyright © 2011-2022 走看看