node 开发

news2024/9/27 12:14:27

文章目录

        • 快速认识node
          • 开始使用node编程
            • hello world
            • 模块和包
            • 什么是模块
            • 创建和加载模块
            • 创建包
            • node.js 的包管理
            • 本地模式 和全局模式
            • 创建全局连接
            • 包的发布
          • 调试

快速认识node

开始使用node编程
hello world

打开你的文本编辑器,在上面输入:

console。log(‘hello world’)

然后将其保存为helloworld.js ,打开终端,然后进入helloworld的所在的文件的目录中,执行
node helloworld.js
如果一切正常就会输出hello world

模块和包

模块 和包是node.js 的重要支柱。开发具有一定功能的模块不可能只有一个文件,需要将其各个功能拆分,然后封装,最后组合成为模块。

什么是模块

模块是node.js 的最基本的组成成分,文件和模块一一对应,node.js 的一个文件就是一个模块。

创建和加载模块
  1. 创建模块
    在node.js创建模块很简单,因为一个模块就是一个文件,我们需要关注的是如何在其他模块中使用这个模块。 node.js 提供了两个对象:exports和require 。其中export 是模块公开的接口,require是用从外部获取模块的接口。
    eg:首先创建一个export.js模块
var name;
exports.setName = function(thyname){
name = thyname;};
exports.sayHello = function(){
console.log('hello'+name);
};

在同级目录下建立一个getmodule.js模块,

var myModule = require('/export');
myModule.setName('BYVoid');
myModule。sayHello();

运行的结果是hello BYVoid
在上面的实例中,module.js通过export对象把setName和sayHello作为模块的访问接口,在getmodule.js通过require(‘/export’)加载这个模块,然后就可以直接访问这个模块中exports的成员对象了

2,单次加载
上诉的实例中的require不会重复加载模块,也就是说无论调用多少次require,获得的模块都是同一个。
3.覆盖exports
将对象封装道模块中:

function Hello(){
var name;
this.setName = function(thyName){
name = thyName;};
this.sayHello = function(){
console.log('hello'+name);};
};
module.exports = Hello;

这里用module.export = Hello代替了上诉的。在外部引用该模块的时候,接口变成了要输出的Hello对象本身,而不是原来的export是
实际上,exports 本身是一个普通的空对象,他是专门用来声明接口的,本质上是通过它为模块闭包内部建立一个有限的访问链接,因为他没有任何特殊的地方,所以可以用其他东西来代替。
但是不能直接对exports 赋值代替对module.exports赋值。exports实际上是和module.export 指向同一个对象的变量,本身会在模块执行后释放,但是module不会释放,所以只能通过指定module.export 来改变接口方向。

创建包
包是比模块更深的含义,将某个独立的模块封装起来,用于发布,更新,依赖管理和版本控制。node.js 根据CommonJS的规范实现了包机制,开发了npm机制来解决包的发布和获取需求。
Node.js的包是一个目录,其中包含了一个JSON格式的包说明文件package.json。严格符合CommonJS规范的包应该具备以下特质:
package.json必须在包的顶层目录下
二进制文件应该在bin目录下;
javaScript代码应该在lib 目录下
文档应该在doc目录下;
单元测试应该在text目录下;
但是node.js没有那么严格的要求,只要顶层目录下有package.json,并且符合一些规定即可。当然,为了提高兼容性,制作包的时候建议严格遵守CommonJS规范。

1 作为文件夹的模块
文件和模块是一一对应的,文件不仅可以是javascript的代码或者是二进制的代码,还可以是文件夹。最简单的包是文件夹的模块。下面举个简单的包的例子:

建立一个文件夹取名somepackage 在当中建立index.js文件:
exports.hello = function(){ cosole.log('hello')}
然后再somepackage外的文件夹中建立文静getpackage.js:var somepackage = require(‘./somepackage’) somepackage.hello()
则运行结果是控制台输出hello

包就是使用方法将文件夹封装成为一个模块,包是这些模块的集合,在模块的基础上提供了更高的层的抽象,相当于提供了一些固定的接口函数库。通过定制package.json,可以创建更加复制的包用于发布。
2 package.json
在前文创建somepackage文件夹下,创建package.json文件,内容如下:
{‘main’:‘./lib/interface.js’}
然后将index.js文件重命名问interface.js文件,并且放入lib字文件夹中。以同样的方式再次调用这个包,依然可以正常使用。
这是因为:Node.js在调用某个包的时候会先检查包中的packag.json文件的main字段,其变成包的接口模块,如果没有这个字段,会选择index.js作为包的接口。

package中的规范:
name:包的名称,唯一,
descrition:包的简要说明
keywords:关键字数组,用于搜索
maintainers:维护者数组,每个元素包含name email web 字段
contributors:贡献者数组:用于写贡献者信息
bugs:提交bug的地址
licenses:许可证数组
dependencies:包的依赖,一个关联数组,由包的名称和版本号组成

node.js 的包管理

npm是node的官方包的管理工具,用于node的包的开发,传播和依赖控制。

  1. 控制包
    使用npm安装包的命令格式:
    npm [i/install][package_name]
本地模式 和全局模式

安装包的时候有两种模式:本地模式和全局模式。默认情况是本地模式,把包安装当前目录的node_modules的子目录下面,node.js的require模块会尝试搜索node_module子目录,因此使用npm本地安装的包可以之间被引用。
还有一种全局模式:

 npm  [install/i] -g [package_name]

与本地模式的不同之处在于多了一个参数-g,因为有些时候一个模块需要被需要模块用到,为了减少多重副本而选择使用全局模式,而且本地模式不会注册path环境变量。

本地模式可以通过require使用 ,但是不注册path
全局模式不能通过require使用,但是会注册path

当将一个包作为工程的一部分的时候,通过本地模式获取,如果要在命令行中使用的话则使用全局安装

创建全局连接

npm link 的功能是在本地包和全局包之间创建符号连链接

包的发布

创建包
在当前目录上运行 npm init
npm adduser 创建自己的账号
使用 npm whoami验证账号
运行npm publish 上传包

调试

1 命令行调试
在命令行输入:node debug debug.js 会启动调试工具
可以使用下面的一些基本命令进行跟踪调试

在这里插入图片描述
2, 远程调试
在命令行输入:
node --debug[=port] script.js
node --debug-brk[=port] script.js
都能打开调试服务器
使用debug选项运行脚本的时候,脚本正常运行,不会暂停,如果要脚本暂停则应该使用–debug–brk 选项,调试服务器启动后立即暂停脚本,等待调试客户端的连接。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/487539.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Java EE】-使用Fiddler抓包以及HTTP的报文格式

作者:学Java的冬瓜 博客主页:☀冬瓜的主页🌙 专栏:【JavaEE】 分享: 在满园弥漫的沉静的光芒之前,一个人更容易看到时间,并看到自己的身影。——史铁生《我与地坛》 主要内容:使用FIddler抓包的…

船舶建造概论(船舶建造工艺任务与现代造船模式)

船舶建造概论 1 船舶建造概论1.1 船舶建造工艺主要任务1.2 船舶建造流程(1)钢材料预处理(2) 钢材料加工(3)分段制作(4)总段制作(5)船台合拢(6&…

【漏洞复现】Apache Superset 未授权访问漏洞(CVE-2023-27524)

文章目录 前言声明一、Apache Superset 简介二、影响范围三、漏洞复现四、整改建议 前言 Apache Superset 存在未授权访问漏洞,攻击者可利用该漏洞验证和访问未经授权的资源。 声明 本篇文章仅用于漏洞复现与技术研究,请勿利用文章内的相关技术从事非法…

2.计算机基础

文章目录 1.冯诺依曼体系结构(1)冯诺依曼体系结构思想(2)五大部件介绍(3)现代计算机逻辑架构 2.现代计算机硬件图 和 CPU(1)现代计算机硬件图(2)CPU运算器结构…

微软正式宣布 Win10 死刑,Win11 LTSC要来了

微软在 2015 年带来了 Windows 10,PC 操作系统也由此进入到一个新的篇章。 如此前每代新系统一样,Windows 10 发布之初,稳定性不足,BUG 众多。 全新的界面设计、交互逻辑以及操作习惯上的强行改变让其很长一段时间都不那么受待见。…

static的常见用法

参考链接:https://blog.csdn.net/guotianqing/article/details/79828100 C语言 作用:提高代码的模块化,提高代码的可读性。 普通的局部变量:在最开始的时候不会进行初始化,存储在栈空间,使用完毕就会释放…

100ASK_全志V853-PRO开发板 环境配置及编译烧写

0.前言 本章主要介绍关于100ASK-V853-PRO开发板的Tina SDK包的下载和编译打包生成镜像,并将镜像烧录到100ASK-V853-PRO开发板上。在进行100ASK-V853-PRO开发板的环境配置前需要获取配置虚拟机系统,可以参考:https://dongshanpi.com/Dongshan…

「蓝桥杯」扫地机器人

扫地机器人 题目描述 小明公司的办公区有一条长长的走廊,由 N 个方格区域组成,如下图所示。 走廊内部署了 K 台扫地机器人,其中第 i 台在第 A_i 个方格区域中。已知扫地机器人每分钟可以移动到左右相邻的方格中,并将该区域清扫干…

图的着色学习

图的边着色 排课表问题:设有m位教师,n个班级,教师xi要给班级yj上pij节课,求如何在最少节次排完所有课。 图论模型:令X{x1,x2,…,xm},Y{y1,y2,…,yn},xi与yj间连pij条边,得偶图G(X,…

【prism系列】子窗口中如何实现区域(Region)管理

前言 在之前系列文章《Region的用法》中,我提到无法在子窗口中实现区域管理,最近经过尝试发现其实是可以的,只是少了一个步骤而已!Region具体细节还请参考这篇。 【Prism系列】Region的用法_prism region_code bean的博客-CSDN博…

一文全览各种 ES 查询在 Java 中的实现

ElasticSearch 进阶:一文全览各种 ES 查询在 Java 中的实现 以下为摘录自用,非本人撰写 本文基于elasticsearch 7.13.2版本,es从7.0以后,发生了很大的更新。7.3以后,已经不推荐使用TransportClient这个client&#xf…

浅谈自动驾驶技术

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和…

【Linux】5. 开发工具的使用(gcc/gdb/makefile)

Linux编译器-gcc/g使用 1. 复习编译链接过程 2. 理解选项当中的含义 这些选项难记住,怎么办? – ESc - iso(对应) gcc选项 -E 只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面-S 编译到汇编语言不进行汇编和链接-c 编译到目标代码-o …

基于OpenHarmony开发的健康生活应用(ArkTS)

健康生活应用(ArkTS) 介绍 本篇Codelab介绍了如何实现一个简单的健康生活应用,主要功能包括: 用户可以创建最多6个健康生活任务(早起,喝水,吃苹果,每日微笑,刷牙&#…

【python语法大练习】【题库】Python 基础练习题库大全

【题库】Python 基础练习题库大全 编程题1. 从键盘输入两个数,求它们的和并输出2. 从键盘输入三个数到a,b,c中,按公式值输出 (input().split())3. 输出“人生苦短,我学Python”4. 计算 111213...m (sum函数)5. 计算分段函数[1] (format)6. 阶…

Ubuntu连接Xshell

Ubuntu连接Xshell 1、安装ssh,开启服务 1、安装ssh sudo apt-get install openssl-server 2、启动ssh服务 /etc/init.d/ssh start 3、修改文件,允许远程登陆 sudo vi /etc/ssh/sshd_config PermitRootLogin prohibit-password #默认为禁止登录 PermitR…

ESP-IDF中的event loop library事件循环库

文章目录 简介事件循环库的使用示例: 简介 Event Loop Library是一种信号传递机制,事件循环库允许组件声明事件,其他组件可以向其注册处理程序——当这些事件发生时将执行的代码。这允许松散耦合的组件将所需的行为附加到其他组件的状态更改…

华为OD机试(20222023)真题目录 + 考点 + 通过率

目录 华为OD机试是什么?华为OD面试流程?华为OD机试通过率高吗?华为OD薪资待遇?华为OD晋升空间?华为OD刷题列表,一天三题,刷出算法新高度,刷出人生新际遇。 大家好,我是哪…

基于Hebb学习的深度学习方法总结

基于Hebb学习的深度学习方法总结 0 引言1 前置知识1.1 Hebb学习规则1.2 Delta学习规则 3 SoftHebb学习算法3.1 WTA(Winner Take All)3.2 SoftHebb3.3 多层Hebb网络3.4 Hebb学习的性能测评 参考文献 0 引言 总所周知,反向传播算法(back-propagating, BP&…

你想要的【微前端】都在这里了! | 京东云技术团队

作者:京东零售 郑炳懿 开篇: 如果你不知道微前端是什么,或者不知道微前端能解决什么问题,那么你可能不需要微前端。 在我看来,对于每一个没有使用过的新技术,都应该有以下几个过程: 1、调研…