A brief discussion on the working principle of require() in Node.js
【Video tutorial recommendation: node js tutorial】
Most people know what the require() function in Node.js does. But how many people know how it works? We use it every day to load library packages and modules, but its internal behavior is mysterious.
We are pursuing the core of Node module system: module.js. This file contains a surprising magical function. It is responsible for loading, compiling and caching each used file. Let us unveil its mystery. .
function Module(id, parent) { this.id = id; this.exports = {}; this.parent = parent; // ...
This Module type can be found in module.js and plays two main roles: First, it provides a basic functionality for all Node.js modules to build an instance when it is loaded from its file, even in the file Runtime persistence, that's why we can add some properties to module.exports and return them when needed.
The second thing of module is to handle the loading mechanism of Node module. The standard require function is actually based on the abstraction of module.require. The latter is just a simple wrapper for Module._load. The loading method handles each The actual loading of the file. Take a look at its code as follows:
Module._load = function(request, parent, isMain) { // 1.在Module._cache中检查模块是否被缓存 // 2.如果缓存中为空,创建一个新的模块实例。 // 3. 保存到缓存 // 4. 使用指定的名称调用module.load() // 在读取了文件内容后将调用module.compile() // 5.如果加载和分析文件时有错误 // 从缓存中删除坏的模块 // 6. 返回 module.exports };
Module._load is responsible for loading new modules and managing the module cache. Caching each module can reduce the frequency of file reading, thus improving performance. Shared module instances allow like a single Save state across applications like an example module.
If a module does not exist in the cache, Module._load will read the file and create a new one. After successfully reading the file content, module._compile will be called
If you pay attention to the sixth step above Step 1, you will see that module.exports is returned, which is why when you define the public interface, you can use exports and module.exports, because they are indeed returned by Model._load and require.
Let’s take a look at module._compile:
Module.prototype._compile = function(content, filename) { // 1. 创建调用模块需要的require标准函数 // 2.将其他帮助方法加入require. // 3.包装JS代码到一个函数,这个函数提供我们的require // 模块, 比如变量本地化到模块的作用域 // 4.返回这个函数 };
The magic happens here. First, a special standard require function will be created. This is the require() function we are familiar with. When the function itself Wrapping Module.require, it also contains some helper properties and methods that few people know, such as:
require(): Load an external module
require.resolve(): Resolve the module name according to its absolute path
require.main: The main module
require. cache: All cache modules
require.extensions: File-based extensions available for compiled methods.
Once require is ready, the entire source code will be wrapped into a new function. This function takes the require module and exports and other exposed variables as parameters. This creates a new function of the module. scope so that it doesn't pollute the rest of the Node.js environment.
(function (exports, require, module, __filename, __dirname) { // YOUR CODE INJECTED HERE! 你的代码在这里 });
Finally, the function that wraps the module will run, and the entire Module._compile method will be executed synchronously, so that the original call to the Module._load method will wait for this code to run before it completes and returns to module.exports to users.
Now, we already know how require('module') loads the module you define through the module system. The module.js source code contains more code principles. You can discover more if you are interested.
For more programming-related knowledge, please visit: Programming Teaching! !
The above is the detailed content of A brief discussion on the working principle of require() in Node.js. For more information, please follow other related articles on the PHP Chinese website!

JavaScript is widely used in websites, mobile applications, desktop applications and server-side programming. 1) In website development, JavaScript operates DOM together with HTML and CSS to achieve dynamic effects and supports frameworks such as jQuery and React. 2) Through ReactNative and Ionic, JavaScript is used to develop cross-platform mobile applications. 3) The Electron framework enables JavaScript to build desktop applications. 4) Node.js allows JavaScript to run on the server side and supports high concurrent requests.

Python is more suitable for data science and automation, while JavaScript is more suitable for front-end and full-stack development. 1. Python performs well in data science and machine learning, using libraries such as NumPy and Pandas for data processing and modeling. 2. Python is concise and efficient in automation and scripting. 3. JavaScript is indispensable in front-end development and is used to build dynamic web pages and single-page applications. 4. JavaScript plays a role in back-end development through Node.js and supports full-stack development.

C and C play a vital role in the JavaScript engine, mainly used to implement interpreters and JIT compilers. 1) C is used to parse JavaScript source code and generate an abstract syntax tree. 2) C is responsible for generating and executing bytecode. 3) C implements the JIT compiler, optimizes and compiles hot-spot code at runtime, and significantly improves the execution efficiency of JavaScript.

JavaScript's application in the real world includes front-end and back-end development. 1) Display front-end applications by building a TODO list application, involving DOM operations and event processing. 2) Build RESTfulAPI through Node.js and Express to demonstrate back-end applications.

The main uses of JavaScript in web development include client interaction, form verification and asynchronous communication. 1) Dynamic content update and user interaction through DOM operations; 2) Client verification is carried out before the user submits data to improve the user experience; 3) Refreshless communication with the server is achieved through AJAX technology.

Understanding how JavaScript engine works internally is important to developers because it helps write more efficient code and understand performance bottlenecks and optimization strategies. 1) The engine's workflow includes three stages: parsing, compiling and execution; 2) During the execution process, the engine will perform dynamic optimization, such as inline cache and hidden classes; 3) Best practices include avoiding global variables, optimizing loops, using const and lets, and avoiding excessive use of closures.

Python is more suitable for beginners, with a smooth learning curve and concise syntax; JavaScript is suitable for front-end development, with a steep learning curve and flexible syntax. 1. Python syntax is intuitive and suitable for data science and back-end development. 2. JavaScript is flexible and widely used in front-end and server-side programming.

Python and JavaScript have their own advantages and disadvantages in terms of community, libraries and resources. 1) The Python community is friendly and suitable for beginners, but the front-end development resources are not as rich as JavaScript. 2) Python is powerful in data science and machine learning libraries, while JavaScript is better in front-end development libraries and frameworks. 3) Both have rich learning resources, but Python is suitable for starting with official documents, while JavaScript is better with MDNWebDocs. The choice should be based on project needs and personal interests.


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Dreamweaver CS6
Visual web development tools

SAP NetWeaver Server Adapter for Eclipse
Integrate Eclipse with SAP NetWeaver application server.

MantisBT
Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.

Zend Studio 13.0.1
Powerful PHP integrated development environment

PhpStorm Mac version
The latest (2018.2.1) professional PHP integrated development tool