这是我在名为foo.js
。
console.log('module.exports:', module.exports)
console.log('module.id:', module.id)
console.log('exports:', exports)
console.log('id:', id)
这是我得到的输出。
$ node foo.js
module.exports: {}
module.id: .
exports: {}
/home/lone/foo.js:4
console.log('id:', id)
^
ReferenceError: id is not defined
at Object.<anonymous> (/home/lone/foo.js:4:20)
at Module._compile (module.js:573:30)
at Object.Module._extensions..js (module.js:584:10)
at Module.load (module.js:507:32)
at tryModuleLoad (module.js:470:12)
at Function.Module._load (module.js:462:3)
at Function.Module.runMain (module.js:609:10)
at startup (bootstrap_node.js:158:16)
at bootstrap_node.js:598:3
这是我无法理解的。 exports
和id
都是。{1}}和module
exports
对象的属性。但我可以访问module.
没有id
限定符,但我无法对module.exports
这样做
属性。
为什么会这样?这里有什么概念可以实现
仅exports
访问module.id
,但不是这样
python setup.py sdist upload -r pypi
?
答案 0 :(得分:1)
这就是NodeJS的行为方式。您编写的每个代码最终都会被包含在具有一些特定参数的自调用函数中。
(function(exports, require, module, __filename, __dirname) {
// your code
})()
这就是为什么即使module
和require
也可以直接使用。
为什么会这样?这里有什么概念可以将module.exports作为导出进行访问,但对于module.id却不是这样?
并不是说您可以访问模块的属性,而是为了便于访问而明确提供了exports
。
重要说明: exports
和module.exports
具有相同的引用,这意味着对任何一个的更改都会反映在其他内容上。
NodeJS文档:https://nodejs.org/api/modules.html#modules_the_module_wrapper
更多参考:https://www.youtube.com/watch?v=9WUFqLwfUwM&list=PLKT6oJQ4t2f-sL50I51a64jBoCknFFJy9