node中输入,输出,以及模块化相关的知识

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

介绍node的常用输入、输出,全局对象,以及模块化相关的知识


一、node的输入,输出

1.1.node的输入

  • 在执行index.js命令行的后面添加要输入的参数 node index.js xiaomi(输入’xiaomi’)
  • 获取输入的参数在index.js中通过process.argv返回的是一个数组 (process.argv[2] ==> xiaomi)

1.2.node常用的输出

  • 最常用的输出内容的方式:console.log()
  • 清空控制台:console.clear()
  • 打印函数的调用栈:console.trace()

二、node的全局对象

2.1 特殊的全局对象(模块中使用)

直接在命令行使用(终端中直接使用__dirname)是找不到的,必须在模块中使用(如在index.js中console.log(__dirname))

  • 获取某个文件的目录名称 __dirname
  • 获取某个文件名称 __filename

2.2 常见的全局对象

  • process 提供node进程中相关的信息(如node的运行环境,参数信息(如上面提到的输入参数信息)等)
  • console 打印内容
  • setTimeout(()=>{},0)
  • setInterval(()=>{},1000)
  • setImmediate(()=>{})
  • process.nextTick(()=>{})
  • global对象(类似于浏览器的window对象)

三、聊聊JavaScript模块化(本身没有模块化)

3.1.模块化的概念

  • 模块化最终的目的是将程序划分为一个个小的结构
  • 在每个结构中编写属于自己的逻辑代码,有自己的作用域不会影响其它的结构
  • 在结构中导出或导入一些 变量,函数,对象

3.1.1.没有模块化时候的解决方法(示例):

//a.js模块(导出)
//通过立即执行函数导出一个对象(因为函数是有作用域)
var moduleBar = (function () {
  var name = "小明";
  var age = 18;

  console.log(name);

  return {
    name,
    age
  }
})()
//b.js模块(导入)
console.log(moduleBar.name);
console.log(moduleBar.age);

缺点:必须记住每个模块中返回对象的命名(如moduleBar)在别的模块中引入。(没有规范的命名)

3.1.2. commonJS规范(node中的规范)

  • cjs中导出变量:exports、module.exports
    源码中将 module.exports = exports
  • cjs中导入变量:require
    导入模块中本质上找的是module.exports指向的对象
    加载过程是同步的,有缓存(文件加载完才往下执行代码)
    require的文件查找规则:
    1.先在node核心模块中查找(如 path,fs等)
    2.本地查找 (./abc 、 …/a 等)
    3.无后缀名(查找 文件夹、.js 、 .json、.node)
  • 缺点: 因为cjs的require函数是同步加载js模块的所以在浏览器中会阻塞代码的执行(所以浏览器中一般采用esModule)

----- cjs的基本使用----

//a.js 模块(导出)
//node中将module.exports = exports并且在最顶层
const name = "xiaomi"
const age = 20 
function say(){
	console.log('你好呀!')
}
//将要导出的内容挂载到exports对象上(刚开始exports为一个空对象)
exports.name = name
exports.age = age
exports.say = say

//b.js 模块(导入)
const objI = require('a.js')   
 //相当于require('a.js')为导出的module.exports对象
 //objI = module.exports 

 //使用导出的对象属性,方法等
 console.log(objI.name)			// "xiaomi"
 console.log(objI.age)			// 20
 objI.say()						// "你好呀!"

3.1.3. ES module

  • ES module中采用export 、export default导出(一个模块只能由一个)
  • ES module中采用import 导入
    注意:采用ES module 会自动开启严格模式

----- cjs的基本使用----

  • 1.1.在index.html中引入js文件时加上type = module
//index.html
 <script src="./index.js" type="module"></script>
  • 1.2.在bar.js中导出对应模块
//bar.js
 const name = "why";
 const age = 18;
 const sayHello = function(name) {
   console.log("你好" + name);
 }
 //方式一:逐个导出
 export const name = "why";
 export const age = 18;
 export const sayHello = function(name) {
   console.log("你好" + name);
 }
//方式二: {}中统一导出变量
//(注意此处导出的大括号不是对象(写键值对会报错),而是es moduel的一种语法,保存的是变量引用列表)
export {
	name,
	age,
	sayHellow
}
//方式三:给变量取别名导出
export {
	name as Mname,
	age as Mage,
	sayHellow as MsayHellow
}

//无名导出
export default function (a,b){
	return a + b
}
  • 1.3.在index.js中导入对应模块
//方式一: import {} from '路径';
import {name,age,sayHellow} from './bar.js'
// 方式二: 导出变量之后可以起别名
import { name as Mname, age as Mage, sayHello as MsayHello } from './bar.js';
// 方式三: * as foo (导出所有变量存放在foo对象中)
import * as foo from './bar.js';
//export default方式导出的 无名导入
import add from './bar.js'
add(1,2)

//import 函数
let flag = true
if(flag){
 	import('./bar.js').then(res=>{
 		console.log(res)
 	}).catch(err=>{
		console.log(err)
	})
}

总结:commonJS和ES module对比

  • cjs 是运行时加载require是一个函数,ES module是编译时解析更快的确定模块之间的关系。
  • cjs是require函数同步加载会阻塞后续代码执行,ES module中的import函数异步加载不会阻塞代码执行
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Node.js输入可以通过命令行参数来获取。在执行Node.js脚本时,可以在命令行的后面添加参数,这些参数可以通过process.argv来获取。比如,执行命令"node index.js xiaomi",可以通过process.argv来获取输入的参数,即"xiaomi"。 在Node.js,常用的输出方式是通过console.log()来打印信息到控制台。除此之外,还有一些其他常用的输出方式,比如使用console.clear()来清空控制台,使用console.trace()来打印函数的调用栈。 Node.js还有一些特殊的全局对象,这些对象可以在模块使用。同时,还有一些常见的全局对象可以在任何模块使用。 关于JavaScript模块化Node.js采用的是CommonJS规范。在CommonJS规范,可以使用module.exports和exports来导出模块的内容,使用require来导入其他模块的内容。 另外,还有ES module的规范,它采用了export和import来导出和导入模块。需要注意的是,使用ES module会自动开启严格模式。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [node输入输出,以及模块化相关知识](https://blog.csdn.net/aguqinwan/article/details/126011184)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值