nodejs中的模块化

一、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 进行代码调试

 */

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

vues

刚好遇见你

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值