iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Nodejs中模块规范的示例分析
  • 308
分享到

Nodejs中模块规范的示例分析

2023-06-15 10:06:29 308人浏览 安东尼
摘要

这篇文章主要为大家展示了“nodejs中模块规范的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“nodejs中模块规范的示例分析”这篇文章吧。CommonJS 模块规范以前加载 JS 文

这篇文章主要为大家展示了“nodejs中模块规范的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“nodejs中模块规范的示例分析”这篇文章吧。

CommonJS 模块规范

以前加载 JS 文件的唯一方式是通过 <script> 标签引入,这个会有什么问题呢?

  • 脚本变多时,需要手动管理加载的顺序;脚本越多就越难管理。

  • 不同脚本之间的逻辑调用,需要通过全局变量的方式。

  • 没有 html 的时候怎么引用 JS 文件呢?这个例子就是 node.js

于是 Node.js 就有了 CommonJS 模块规范,而 webpack 也是兼容了 CommonJS 的写法,让我们可以用 CommonJS 规范来写前端代码。

CommonJS 模块规范是 javascript 社区发起的,它在 Node.js 上得到应用并推广,后续也影响到了浏览器端 JavaScript。

require

require 是 CommonJS 模块规范的 api,用来引入要使用的文件。比如引入 lib.js

require('./lib');

require 默认返回一个空对象;新建两个文件,文件内容如下:

// lib.jsconsole.log('this is lib');// index.jsconsole.log('start require')var lib = require('./lib'); // 默认返回一个空对象console.log('end require', lib);

来运行看看:node index.js

Nodejs中模块规范的示例分析

它也是可以通过 exports 来挂载一些属性的:字符串、函数、对象等类型的数据。

lib.js 添加一些代码

console.log('this is lib')exports.hello = "world"exports.add = function (a, b) {  return a + b;}exports.obj = { hello: "Node" }

Nodejs中模块规范的示例分析

看来在 CommonJS 模块规范下,它是默认有一个 exports 这样的空对象的。

那既然 require 返回这样一个对象,那么修改和添加其中的属性会怎么样呢?

// index.js// 既然 require 返回一个对象,那么修改和添加属性会怎么样呢?lib.hello = 'node';lib.update = '1234';
// lib.jssetTimeout(function() {  console.log(exports)}, 500)

Nodejs中模块规范的示例分析

可以看到,在 lib.js 加了一个 500ms 之后打印的内容是改变了的。所以通过 exports 输出的时候要注意这个拷贝的问题。可能有些同学会看到过这样的一段话:CommonJS 模块输出的是一个值的浅拷贝,ES6 模块输出的是值的引用。那么这是怎么回事呢?

原来 require 还可以通过 module.exports 的方式返回数据,而且数据类型是不限的,例如返回一个函数:

// lib.jsconsole.log('this is lib')exports.hello = "world"exports.add = function (a, b) {  return a + b;}exports.obj = { hello: "Node" }// setTimeout(function() {//   console.log(exports)// }, 500)module.exports = function minus(a, b) {  return a - b;}

Nodejs中模块规范的示例分析

可以看到:lib 返回输出的 minus 函数。

require 一个模块时,module.exports 的优先级要高于 exports,如果指定了 module.exports,那么就会使用 module.exports 指定的对象,如果没有指定 module.exports,就会使用 exports 对象。

npm

npm 相信大家都不陌生,那这里就只是简单介绍一下吧。

npm 是 Node.js 的包管理工具,安装 Node.js 的时候都会自带有 npm 的。而包则是别人写的 Node.js 模块,我们平时开发都会经常用到一些别人开发出来放到 Node.js 服务器上面的包。

npm 初始化:npm init,初始化的时候一直回车就好,之后会生成一个 package.JSON 文件;或者执行命令 npm init -y,这样就是生成一个默认的 package.json 文件,里面的属性和执行 npm init 一直回车是一样的。

Nodejs中模块规范的示例分析

package.json 文件内容如下:

{  "name": "node",  "version": "1.0.0",  "description": "",  "main": "index.js",  "scripts": {    "test": "echo \"Error: no test specified\" && exit 1"  },  "author": "",  "license": "ISC"}
  • 下载安装依赖包 <packageName>npm install <packageName>;如果想要全局安装则添加 -gnpm install <packageName> -g。如安装 glob 包:npm install glob

  • 卸载依赖包的命令是 npm uninstall <packageName>

比如安装 express 包,安装成功会生成一个 node-modules 文件夹,我们下载的包就放在这个文件里面:

Nodejs中模块规范的示例分析

如果使用 npm 安装依赖包的速度很慢,可以使用淘宝镜像 cnpm 来安装,镜像是指它把国外 npm 的包做一层复制然后映射到国内的服务器上面,这样不用山长水远去国外拉包,速度会快很多。

安装 cnpm

npm install -g cnpm --reGIStry=https://registry.npm.taobao.org

cnpm 的使用和 npm 类似:cnpm install <packageName>

那如果你觉得 cnpm 不够正宗,不想长期使用,但有些包下载又确实慢了,可以临时使用镜像,比如安装 express

npm install express --registry=Https://registry.npm.taobao.org

--registry= 是指定下载地址的意思,例如一些公司可能有自己的依赖包服务器,那么可以通过将这个地址指向公司的服务器地址来更快的下载依赖包。

cnpm 本身其实是 npm 的一个别名,使用 cnpm 的时候会自动帮我们加上后面的参数 --registry=https://registry.npm.taobao.org,然后通过镜像地址来下载依赖包。

另外,npm 使用遇到问题可以登录 官网 寻找解决办法:

Nodejs中模块规范的示例分析

总结

  • Node.js 的模块规范就是 CommonJS 模块规范。

  • CommonJS 模块规范通过 require() 加载模块,默认返回一个对象,可以通过设置 exportsmodule.exports 设置模块返回的数据。

  • Node.js 的包管理工具是 npm,可通过使用镜像 cnpm 来提高下载速度。

以上是“Nodejs中模块规范的示例分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网精选频道!

--结束END--

本文标题: Nodejs中模块规范的示例分析

本文链接: https://www.lsjlt.com/news/279680.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • c++中if elseif使用规则
    c++ 中 if-else if 语句的使用规则为:语法:if (条件1) { // 执行代码块 1} else if (条件 2) { // 执行代码块 2}// ...else ...
    99+
    2024-05-14
    c++
  • c++中的继承怎么写
    继承是一种允许类从现有类派生并访问其成员的强大机制。在 c++ 中,继承类型包括:单继承:一个子类从一个基类继承。多继承:一个子类从多个基类继承。层次继承:多个子类从同一个基类继承。多层...
    99+
    2024-05-14
    c++
  • c++中如何使用类和对象掌握目标
    在 c++ 中创建类和对象:使用 class 关键字定义类,包含数据成员和方法。使用对象名称和类名称创建对象。访问权限包括:公有、受保护和私有。数据成员是类的变量,每个对象拥有自己的副本...
    99+
    2024-05-14
    c++
  • c++中优先级是什么意思
    c++ 中的优先级规则:优先级高的操作符先执行,相同优先级的从左到右执行,括号可改变执行顺序。操作符优先级表包含从最高到最低的优先级列表,其中赋值运算符具有最低优先级。通过了解优先级,可...
    99+
    2024-05-14
    c++
  • c++中a+是什么意思
    c++ 中的 a+ 运算符表示自增运算符,用于将变量递增 1 并将结果存储在同一变量中。语法为 a++,用法包括循环和计数器。它可与后置递增运算符 ++a 交换使用,后者在表达式求值后递...
    99+
    2024-05-14
    c++
  • c++中a.b什么意思
    c++kquote>“a.b”表示对象“a”的成员“b”,用于访问对象成员,可用“对象名.成员名”的语法。它还可以用于访问嵌套成员,如“对象名.嵌套成员名.成员名”的语法。 c++...
    99+
    2024-05-14
    c++
  • C++ 并发编程库的优缺点
    c++++ 提供了多种并发编程库,满足不同场景下的需求。线程库 (std::thread) 易于使用但开销大;异步库 (std::async) 可异步执行任务,但 api 复杂;协程库 ...
    99+
    2024-05-14
    c++ 并发编程
  • 如何在 Golang 中备份数据库?
    在 golang 中备份数据库对于保护数据至关重要。可以使用标准库中的 database/sql 包,或第三方包如 github.com/go-sql-driver/mysql。具体步骤...
    99+
    2024-05-14
    golang 数据库备份 mysql git 标准库
  • 如何在 Golang 中优雅地处理错误?
    在 go 中,优雅处理错误包括:使用 error 类型;使用 errors 包函数和类型;自定义错误类型;遵循错误处理模式,包括关闭资源、检查错误、打印错误信息和处理或返回错误。 在 ...
    99+
    2024-05-14
    golang 错误处理
  • 如何构建 Golang RESTful API,并使用中间件进行身份验证?
    本文介绍了如何构建 golang restful api。首先,通过导入必要的库、定义数据模型和创建路由来构建 restful api。其次,使用 go-chi/chigot 和 go-...
    99+
    2024-05-14
    golang git
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作