nodejs基础篇(一)

news/2024/7/10 2:54:39 标签: nodejs, vue, webpack

我从2017年开始接触nodejs,到现在用了一年多了,觉得我有必要写点东西出来,记录自己的积累的知识体系,以便更好的掌握nodejs
nodejs专题不是按照严格的学习历程书写,纯属个人划分的等级。

认识AMD、UMD、CommonJS

  1. AMD(Asynchromous Module Definition - 异步模块定义)

    AMD是RequireJS在推广过程中对模块定义的规范化产出。AMD是异步加载模块,推崇依赖前置。

    define('module1', ['jquery'], ($) => {
    //do something...
    });

    可能有的人还听过CMD(Common Module Definition - 公共模块定义),CMD是SeaJS在推广过程中对模块定义的规范化产出。对于模块的依赖,CMD是延迟执行,推崇依赖就近。目前很少有人会提到CMD,已经被AMD同化了,所以目前流行的说法只有AMD、UMD和CommonJS。

    再扩展一点知识吧,使用webpack开发一个工具库时,会配置libraryTarget属性,它的可选值有amd、umd、commonjs。如果libraryTarget: ‘amd’或者libraryTarget: ‘commonjs’,只有nodejs环境才可以使用,浏览器无法使用 ,而libraryTarget: ‘umd’时,既可以在nodejs中使用又可以在浏览器引用使用。

    如果libraryTarget: ‘umd’,浏览器的识别顺序是:

    先判断是否支持Node.js的模块(exports)是否存在,存在则使用Node.js模块模式。
    再判断是否支持AMD(define是否存在),存在则使用AMD方式加载模块。
    否则采用浏览器全局引用

    // umd打包后的基本格式
    (function (window, factory) {
        if (typeof exports === 'object') {
            module.exports = factory();
        } else if (typeof define === 'function' && define.amd) {
            define(factory);
        } else {
            window.eventUtil = factory();
        }
    })(this, function () {
        // module ...
    });
    
  2. UMD(Universal Module Definition - 通用模块定义)

    UMD又是个什么玩意呢?UMD是AMD和CommonJS的一个糅合。AMD是浏览器优先,异步加载;CommonJS是服务器优先,同步加载。

    既然要通用,怎么办呢?那就先判断是否支持node.js的模块,存在就使用node.js;再判断是否支持AMD(define是否存在),存在则使用AMD的方式加载。这就是所谓的UMD。

        ((root, factory) => {
          if (typeof define === 'function' && define.amd) {
            //AMD
            define(['jquery'], factory);
          } else if (typeof exports === 'object') {
            //CommonJS
            var $ = requie('jquery');
            module.exports = factory($);
          } else {
            //都不是,浏览器全局定义
            root.testModule = factory(root.jQuery);
          }
        })(this, ($) => {
          //do something...  这里是真正的函数体
        });
  3. CommonJS
    CommonJS是服务端模块的规范,由于Node.js被广泛认知,也可理解为Node.js默认支持的就是CommonJS规范。
    根据CommonJS规范,一个单独的文件就是一个模块。加载模块使用require方法,该方法读取一个文件并执行,最后返回文件内部的module.exports对象。

     //file1.js
     moudle.exports = {
      a: 1
    };
    
    //file2.js
    var f1 = require('./file1');
    var v = f1.a + 2;
    module.exports ={
      v: v
    };

    CommonJS 加载模块是同步的,所以只有加载完成才能执行后面的操作。像Node.js主要用于服务器的编程,加载的模块文件一般都已经存在本地硬盘,所以加载起来比较快,不用考虑异步加载的方式,所以CommonJS规范比较适用。但如果是浏览器环境,要从服务器加载模块,这时就必须采用异步模式。所以就有了 AMD CMD 解决方案。

总结

说了这么多,大家可能有了基础的认识,也解答了很多人的疑惑。
下一节给大家讲解一下CommonJS和ES6在Node.js中的使用。


http://www.niftyadmin.cn/n/1581273.html

相关文章

再议ASP.NET DataGrid控件中的“添加新行”功能

在园子里搜索了一下,发现不管是panchengyong的“在DataGrid快速添加新行(c#) ”还是piccolo的”在DataGrid快速添加新行“,都只是简单的实现了添加新行,功能上还是有改进的余地。说起在DataGrid中添加新行,ASP.NET开发的大牛人物&…

浅谈ES6的Promise对象

相信凡是写过javascript的童鞋也一定都写过回调方法(callback),简单说回调方法就是将一个方法func2作为参数传入另一个方法func1中,当func1执行到某一步或者满足某种条件的时候才执行传入的参数func2,例如下面的代码段…

Open Relay 测试链接

1.Anonymous Relay Test[url]http://www.antispam-ufrj.pads.ufrj.br/test-relay.html[/url]2.[url]http://abuse.net/relay.html[/url]3.检查邮件服务器是否列入RBL名单:[url]http://openrbl.org/[/url]

node版本管理器——nvm

nvm是管理node版本的一个工具,具体介绍不再赘述,请到GitHub(https://github.com/creationix/nvm)查看。 安装 Linux / Mac curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash 或 wge…

LINQ篇:查询句法[转]

查询句法是使用标准的LINQ查询运算符来表达查询时一个方便的声明式简化写法。该句法能在代码里表达查询时增进可读性和简洁性,读起来容易,也容易让人写对。Visual Studio 对查询句法提供了完整的intellisense和编译时检查支持。 在底下,C#和V…

centos下修改mysql默认端口

mysql5.6安装&#xff1a; wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm rpm -ivh mysql-community-release-el7-5.noarch.rpm yum -y install mysql mysql-server 默认mysql配置文件位于/etc/my.cnf 在my.cnf中添加 port<yourport> …

VS2005无法生成类关系图问题解决方案

昨天下午本来打算将刚整理好的C#异步TCP类库利用VS2005的生成类关系图功能生成类关系图放到类说明文档中&#xff0c;像以前一样打开VS2005&#xff0c;点击项目——>查看类关系图&#xff0c;出来一个对话框&#xff0c;提示“Cant find file "C:\Program Files\Micro…

nginx开启gzip压缩

nginx安装&#xff1a; yum install -y nginx 配置文件默认在/etc/nginx/nginx.conf 打开nginx.conf添加 gzip on;gzip_min_length 1k;gzip_buffers 4 16k;#gzip_http_version 1.0;gzip_comp_level 2;gzip_types text/plain application/x-javascript text/css application/…