Node.js v14.20.0 文档


目录

vm 虚拟机#

中英对照

vm 模块允许在 V8 虚拟机上下文中编译和运行代码。 vm 模块不是安全的机制。 不要使用它来运行不受信任的代码。


vm.Script#

中英对照

vm.Script 类的实例包含可以在特定上下文中执行的预编译脚本。

new vm.Script(code[, options])#

中英对照

    如果 options 是字符串,则指定文件名。

    script.createCachedData()#

    中英对照

      创建可与 Script 构造函数的 cachedData 选项一起使用的代码缓存。 返回 Buffer。 此方法可以随时调用任意次数。

      
      

      script.runInContext(contextifiedObject[, options])#

      中英对照

        在给定的 contextifiedObject 中运行 vm.Script 对象包含的编译代码并返回结果。 运行代码无权访问本地作用域。

        
        

        script.runInNewContext([contextObject[, options]])#

        中英对照

          首先对给定的 contextObject 进行上下文隔离化,在创建的上下文中运行 vm.Script 对象包含的编译代码,并返回结果。 运行代码无权访问本地作用域。

          
          

          script.runInThisContext([options])#

          中英对照

            在当前 global 对象的上下文中运行 vm.Script 包含的编译代码。 运行代码无权访问本地作用域,但确实有访问当前 global 对象的权限。

            
            

            vm.Module#

            中英对照

            此特性仅在启用 --experimental-vm-modules 命令标志时可用。

            
            

            module.dependencySpecifiers#

            中英对照

              该模块所有依赖项的说明符。 返回的数组被冻结,不允许对其进行任何更改。

              module.error#

              中英对照

                如果 module.status'errored',则该属性包含模块在求值过程中抛出的异常。 如果状态是别的,访问这个属性会导致抛出异常。

                module.evaluate([options])#

                中英对照

                  评估模块。

                  module.identifier#

                  中英对照

                    当前模块的标识符,在构造函数中设置。

                    module.link(linker)#

                    中英对照

                      链接模块依赖项。 此方法必须在求值前调用,并且每个模块只能调用一次。

                          module.namespace#

                          中英对照

                            模块的命名空间对象。 这仅在链接 (module.link()) 完成后可用。

                            module.status#

                            中英对照

                              模块的当前状态。 将是以下之一:

                                vm.SourceTextModule#

                                中英对照

                                此特性仅在启用 --experimental-vm-modules 命令标志时可用。

                                  new vm.SourceTextModule(code[, options])#

                                  中英对照

                                    创建新的 SourceTextModule 实例。

                                    
                                    

                                    sourceTextModule.createCachedData()#

                                    中英对照

                                      创建可与 SourceTextModule 构造函数的 cachedData 选项一起使用的代码缓存。 返回 Buffer。 在评估模块之前,可以多次调用此方法。

                                      
                                      

                                      vm.SyntheticModule#

                                      中英对照

                                      此特性仅在启用 --experimental-vm-modules 命令标志时可用。

                                        
                                        

                                        new vm.SyntheticModule(exportNames, evaluateCallback[, options])#

                                        中英对照

                                          创建新的 SyntheticModule 实例。

                                          syntheticModule.setExport(name, value)#

                                          中英对照

                                            此方法用于模块链接后设置导出的值。 如果在链接模块之前调用,则会抛出 ERR_VM_MODULE_STATUS 错误。

                                            
                                            

                                            vm.compileFunction(code[, params[, options]])#

                                            中英对照

                                              将给定的代码编译到提供的上下文中(如果没有提供上下文,则使用当前上下文),并返回它包装在具有给定 params 的函数中。

                                              vm.createContext([contextObject[, options]])#

                                              中英对照

                                                如果给定 contextObjectvm.createContext() 方法将准备那个对象,以便它可以用于调用 vm.runInContext()script.runInContext()。 在此类脚本中,contextObject 将是全局对象,保留其所有现有属性,但也具有任何标准全局对象具有的内置对象和函数。 在 vm 模块运行的脚本之外,全局变量将保持不变。

                                                
                                                

                                                vm.isContext(object)#

                                                中英对照

                                                  如果给定的 object 对象已使用 vm.createContext() 上下文隔离化,则返回 true

                                                  vm.measureMemory([options])#

                                                  中英对照

                                                  测量 V8 已知的内存并被当前 V8 隔离已知的所有上下文或主上下文使用。

                                                    
                                                    

                                                    vm.runInContext(code, contextifiedObject[, options])#

                                                    中英对照

                                                      vm.runInContext() 方法编译 code,在 contextifiedObject 的上下文中运行它,然后返回结果。 运行代码无权访问本地作用域。 contextifiedObject 对象必须之前已经使用 vm.createContext() 方法上下文隔离化

                                                      
                                                      

                                                      vm.runInNewContext(code[, contextObject[, options]])#

                                                      中英对照

                                                        vm.runInNewContext() 首先将给定的 contextObject 上下文化(如果作为 undefined 传入,则创建新的 contextObject),编译 code,在创建的上下文中运行它,然后返回结果。 运行代码无权访问本地作用域。

                                                        
                                                        

                                                        vm.runInThisContext(code[, options])#

                                                        中英对照

                                                          vm.runInThisContext() 编译 code,在当前 global 的上下文中运行它并返回结果。 运行代码无权访问局部作用域,但可以访问当前 global 对象。

                                                          
                                                          

                                                          示例:在 VM 中运行 HTTP Server#

                                                          中英对照

                                                          当使用 script.runInThisContext()vm.runInThisContext() 时,代码在当前 V8 全局上下文中执行。 传给此 VM 上下文的代码将有自己的隔离作用域。

                                                          
                                                          

                                                          上下文隔离化一个对象意味着什么?#

                                                          中英对照

                                                          在 Node.js 中执行的所有 JavaScript 都在 "上下文" 的作用域内运行。 根据 V8 嵌入器指南

                                                          与异步任务和 Promise 的超时交互#

                                                          中英对照

                                                          Promiseasync function 可以异步地调度 JavaScript 引擎运行的任务。 默认情况下,这些任务在当前堆栈上的所有 JavaScript 函数执行完毕后运行。 这允许转义 timeoutbreakOnSigint 选项的功能。

                                                          
                                                          

                                                          
                                                          

                                                          返回顶部