当前位置: 首页 > 后端技术 > Node.js

node学习系列基础篇

时间:2023-04-03 19:53:14 Node.js

node求模块顺序。简单的说,如果是require('x'),如果开头不是相对或者绝对地址符号,尾部也没有说是.js或者.json,就会认为是一个模块。尝试去找。先查找核心模块,然后逐层查找node_modules文件夹。在每一级node_modules中,首先检查是否有basename为你要查找的文件的文件,然后检查modulename文件夹下的package.json中是否有main标记。文件,然后不要放弃,看看模块名文件夹下有没有index.js和index.node。如果最后找不到,就需要搜索全局环境,比如$HOME/.node_modules/什么的。关于node.js的模块搜索顺序require.resolve()module.exportsvsexportsusagefunctionhello(){console.log('Hello,world!');}functiongreet(name){console.log('Hello,'+name+'!');}module.exports={hello:hello,greet:greet};exports.hello=hello;exports.greet=greet;但是不能直接给exports赋值://代码可以执行,但是模块不导出任何变量:exports={hello:hello,greet:greet};不同的是,module.exports的初始值是一个空对象{}exports是对module.exports的引用,require()返回的是一个模块。exports而不是exports是指引用module.exports的exports的值。改变module.exports时,exports不会改变,而当模块导出时,实际导出执行的是module.exports,而不是exportsfoo.jsexports.a=function(){console.log('a')}module.exports={a:2}exports.a=1test.jsvarx=require('./foo');console.log(x.a)//2注意module.exports不能导出原型foo.js创建的私有方法functionView(){}View.prototype.test=function(){console.log('test')}View.test1=function(){console.log('test1')}module.exports=View;test.jsvarx=require('./foo');console.log(x)//{[Function:View]test1:[Function]}console.log(x.test)//undefinedconsole.log(x.test1)//[Function]x.test1()//test1result{[Function:View]test1:[Function]}undefined[Function]test1结论如果想输出一个key-value对象{},可以使用exportsExistingemptyobject{},继续添加新的key值在上面;如果你想导出一个函数或数组,你必须直接给module.exports对象赋值。所以我们可以得出一个结论:直接给module.exports赋值可以应对任何情况。exports和module.exports之间的区别module.exports和exports??关于exports的总结基础模块processprocess是Node.js提供的一个对象,代表当前Node.js进程JavaScript程序是事件驱动执行的单线程模型,Node.js也不例外。Node.js继续执行响应事件的JavaScript函数,直到没有可以响应事件的函数执行,Node.js退出。如果我们想在下一次事件响应中执行代码,可以调用process.nextTick()://test.js//process.nextTick()会在下一轮事件循环中被调用:process.nextTick(function(){console.log('nextTick回调!');});console.log('nextTick已设置!');用Node执行上面的代码nodetest.js,你会看到打印出来的是:nextTickwasset!nextTickcallback!这意味着传递给process.nextTick()的函数不会立即执行,而是等到下一个事件循环。Node.js进程本身的事件由进程对象处理。如果我们响应退出事件,我们可以在程序即将退出时执行一个回调函数://程序即将退出时的回调函数:process.on('exit',function(code){console.log('即将退出代码:'+code);});判断JavaScript执行环境有很多JavaScript代码既可以在浏览器环境也可以在Node环境下执行,但是有时候,程序本身需要判断自己在什么环境下执行的,常见的方式是根据全局判断浏览器和Node环境提供的变量名:if(typeof(window)==='undefined'){console.log('node.js');}else{console.日志(“浏览器”);}