Node开发--->3_node模块化开发之第三方模块

3. 第三方模块

3.1 什么是第三方模块

包=第三方模块

第一种存在形式类似于jQuery

3.2 如何获取第三方模块

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

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



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

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

3.3 nodemon第三方模块


-g:是指全局安装
输入:nodemon .\01.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 {
    width: 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 {
  width: 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 [email protected] 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

4. Node.js中模块的加载机制

5. package.json 文件

原文地址:https://www.cnblogs.com/deer-cen/p/12524346.html

时间: 2024-11-02 19:06:24

Node开发--->3_node模块化开发之第三方模块的相关文章

node.js的模块化开发

node.js的代码都是构建在模块化开发的基础之上,模块化开始也是node.js的核心之一. 传统非模块化开发的缺点:1.命名冲突   2.文件依赖 标准的模块化规范: 1.AMD -requirejs 2.CMD- seajs 模块化的规范定义的一些写代码的规则,只要遵循了同样的标准,基本上风格都是一致的 服务端的模块化规范: 1.Common.js  -Node.js 模块化相关的规则: 1.一个js文件 都是一个独立的模块,模块内部的成员都是相互独立的 2.模块化的导入和导出 案例1(ex

node的express框架,核心第三方模块body-parser 获取我们所有post请求传过来数据

- 安装 body-parser模块- npm install body-parser -S - 调用- let bodyParser=require('body-parser'); - 设置中间件- app.use(bodyParser.urlencoded({extended:true})); - 判断请求体格式是不是json格式,如果是的话会调用JSON.parse方法把请求体字符串转成对象 - app.use(bodyParser.json()); -上面两个只会有一个生效 - 获取po

借助Gradle Plugin解决模块化开发中模块如何对外暴露接口

直奔主题,在模块化开发中,模块间的数据交流大多数同学会采用以接口作为通信协议的方式.需要面对的问题有以下几点: 接口由谁来维护?这个问题简单,由提供服务的模块来维护.接口怎么暴露?打成jar包,发布到maven.接口在哪里维护?现在可以参考的方案有三种:一. 所有相关模块的接口统一在一个模块中维护:二. 各个模块的接口分别在自建一个新的模块中维护,通过命名规则一一对应:三. 像微信的.api方案,使用特殊的规则混杂在各自的模块中. 如果接着第一个问题,方案一好像就有点难确定接口对应的来源模块.方

模块化开发(一)

1.Node.js解决命名冲突和文件依赖的问题. 2.模块化开发的优点: 生产角度:一种生产方式,生产效率高,维护成本低 软件开发角度:一种开发模式,一种写代码的方式,开发效率高,方便后期维护 3.什么是模块化开发? 模块化:就是把一个非常复杂的一个系统给具体的细化:细化到各个小功能点,然后通过某种方式,或者说某种规则,把这些模块集合到一起,就构成了模块化系统 4.模块化演变: 全局函数:全局变量污染,无法保证不与其他模块发生变量命名冲突:模块成员之间看不出直接关系 对象命名空间:优点:从理论意

js模块化开发

为什么要进行模块化开发? 1.当你写了一个这样的comm.js文件时,里面有function tab(){}方法,这时,你给你的同事用,你同事把这个comm.js引入页面后,在页面上又写了一个function tab(){},这时,就会覆盖你在comm.js中的tab方法.因为这个同事不知道你comm.js中有tab这个方法名. 2.如果你同事在页面上引入了你写的comm.js后,又引入了一个第三方插件xxx,而这个xxx插件里面刚好也有tab方法,那这时就会出现问题.你同事就会找你,说你写的c

javascript模块化开发编程

随着网站的不断迭代更新,js代码越来越多,那么问题来了 代码比较乱 命名出现冲突 文件依赖比较繁杂 为了解决以上问题,模块化开发出现了 1.一个简单的demo,维护和扩展模块 模块的维护和扩展一定要遵守一个约定:开闭原则 对添加开放,对修改封闭 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>扩展和维护模块</

前端模块化开发的价值

本文发表在<程序员>杂志 2013 年 3 月刊,推荐购买. 前端模块化开发的价值 随着互联网的飞速发展,前端开发越来越复杂.本文将从实际项目中遇到的问题出发,讲述模块化能解决哪些问题,以及如何使用 Sea.js 进行前端的模块化开发. 恼人的命名冲突 我们从一个简单的习惯出发.我做项目时,常常会将一些通用的.底层的功能抽象出来,独立成一个个函数,比如 function each(arr) { // 实现代码 } function log(str) { // 实现代码 } 并像模像样地把这些函

Javascript模块化开发 – AMD规范

通行的Javascript模块规范共有两种:CommonJS和AMD. 2009年,美国程序员Ryan Dahl创造了node.js项目,将javascript语言用于服务器端编程.这标志"Javascript模块化编程"正式诞生.因为老实说,在浏览器环境下,没有模块也不是特别大的问题,毕竟网页程序的复杂性有限:但是在服务器端,一定要有模块,与操作系统和其他应用程序互动,否则根本没法编程. node.js的模块系统,就是参照CommonJS规范实现的.在CommonJS中,有一个全局性

前端模块化开发学习之gulp&amp;browserify篇

 随着web应用的发展,前端的比重占得越来越多,编写代码从而也越来越复杂.而通常我们需要将不同功能或者不同模块的代码分开写,最后在html中一起加载,这样做是可以的,但是当你需要进行维护或者是二次开发的时候,你会觉得十分费劲,因为你不知道文件之间复杂的关系,所以我们需要利用一些插件来配合进行模块化的开发. 所谓模块化的开发,写过nodejs的人都知道,文件之间的依赖可以用require()实现,但是浏览器端是不支持这样的依赖形式的,而browserify却可以解决这个问题,再加上gulp这个强大