在任何模块文件内部,可以使用__dirname变量获取当前模块文件所在目录的完整绝对路径。
- 在应用程序根目录下新建app.js文件,其中代码如下所示。
var testModule1=require(’. ./test/testModule.js’); - 在应用程序根目录下新建一个test子目录,在该目录下新建一个testModule.js文件,其中代码如下所示。
console.log(__dirname); - 在命令行窗口中输入“node app.js”命令并按下回车键,REPL运行环境中将显示testModule.js文件所在目录的完整绝对路径,执行
- 运行结果是C:\Users\Administrator\Desktop\test(执行文件在哪里,就显示出对应的绝对路径)
接下来结合path.resolve进行操作(在testModule.js中进行实验,代码如下)
var path = require('path')
console.log(path.resolve(__dirname)) // C:\Users\Administrator\Desktop\test
console.log(path.resolve(__dirname, './')) // C:\Users\Administrator\Desktop\test
console.log(path.resolve(__dirname, './bar')) // C:\Users\Administrator\Desktop\test\bar
console.log(path.resolve(__dirname, '../bar')) // C:\Users\Administrator\Desktop\bar
由此可以发现path.resolve的运行是从左向右的
JavaScript模块的编译
在编译过程中,Node对获取的js文件内容进行了头尾包装。在头部添加了(function(exports, require, module, __filename, __dirname){\n, 在尾部添加了\n}),这样每个模块文件之间进行了作用域隔离。