一、node的模块化
// 全局变量就是可以直接访问的变量
// 如果定义在global上的属性,肯定是一个全局变量, 可以直接访问
// node 里面默认在文件中打印this的问题
console.log(process.version);
console.log(global);
console.log(this); // 在文件执行的过程中,默认这个文件会被加一层函数 主要是为了实现node的模块化功能
// 通过函数的参数进行传入,我们在文件中可以直接进行访问
// exports require module __filename __direname
console.log(__filename); //当前的这个文件 绝对路径
console.log(__dirname); // 当前文件运行的文件夹
console.log(process.cwd()); //当前工作目录 可以更改
// node 中模块化会使用到这三个属性,exports require module node
// 模块化
/**
* 1.可以帮我们解决命名冲突的问题
* 2.每一个js文件 都是一个模块
* 3.模块之间可以相互引用
* 4.module.exports
* module.exports 导出模块 node的规范 common.js 规范
* 每个文件外面都会包装一个函数
* 高内聚 低耦合
* esModule (es6规范) cmd(sea.js) amd(require.js) umd(统一模块化规范,cmd amd common,不包含es6)
* 两大主流:esModule,common.js node中默认不支持es6
* common.js 规范动态引入,import 静态引入
* node中的模块化实现 == webpack模块的实现
* node中的模块是如何加载的
*
* 目前如果在node中使用import或者export 则要使用babel-node来进行转化
*
* node中的模块可以分为三类
*
* 1.核心模块(内置模块)fs http path 不需要安装 引入的时候不需要增加相对路径、绝对路径
* 2.第三方模块 require('co') 需要安装 别人写的
* 3.自定义模块 需要通过绝对路径或者相对路径引入
* */
console.log(Object.keys(global))
二、核心模块
// fs path vm
// fs:file system path:操作路径的 vm 做一个虚拟运行环境
// readFileSync 同步 读取文件全部使用绝对路径
/* const fs=require("fs");
let r=fs.readFileSync('.gitignore','utf-8');
console.log(r); */
// 如果需要拼接/ 必须采用join resolve 会回到根目录
const fs=require("fs");
const path=require('path');
let w=path.join('a','b','c','/'); //拼接 join 可以拼接/
let r1=path.resolve(__dirname,'a','b','c','/'); //解析出绝对路径
console.log(w,r1);
/* let flag=fs.existsSync(path.resolve(__dirname),'../../.gitignore');
if(flag){
let r=fs.readFileSync('.gitignore','utf-8');
} */
let ext=path.extname('a.js');
let basename=path.basename('a.js','js');
console.log(ext,basename);
let vm=require("vm");
// eval new Function
// 如果在前端中,如果在前端中需要让一个模块执行,
// 模块之间要相互独立,不希望模块之间的变量共享
let a=100000;
let str=`console.log(a)`;
eval(str);
vm.runInContext() //沙箱环境,就是一个干净的运行环境
三、node中采用同步读取文件
//node 中可以采用同步的方式读取文件
// 异步代码需要通过回调函数来解决
// 闭包是有返回值的。
let a=require("./a.js")
console.log(a)
/* let a=function (exports,require,module,__filename,__dirname){
module.exports="hello";
return module.exports;
}() */
// 通过读取文件内容,将内容包装到一个自执行函数中,默认返回module.exports 作为函数的结果
function sum(a){
return function (){
}
}
let fn=sum('1');
fn('2');
/***
* 1.通过浏览器中调试node代码
* 2.vscode 进行代码调试
*/