new vm.SourceTextModule(code[, options])
曆史
版本 | 變化 |
---|---|
v17.0.0、v16.12.0 | 向 |
參數
code
<string> JavaScript 模塊代碼解析options
identifier
<string> 堆棧跟蹤中使用的字符串。 默認:'vm:module(i)'
其中i
是 context-specific 升序索引。cachedData
<Buffer> | <TypedArray> | <DataView> 為提供的源提供可選的Buffer
或TypedArray
或DataView
以及 V8 的代碼緩存數據。code
必須與創建此cachedData
的模塊相同。context
<Object>vm.createContext()
方法返回的 contextified 對象,用於在其中編譯和評估此Module
。lineOffset
<integer> 指定在此Module
生成的堆棧跟蹤中顯示的行號偏移量。 默認:0
。columnOffset
<integer> 指定在此Module
生成的堆棧跟蹤中顯示的 first-line 列號偏移量。 默認:0
。initializeImportMeta
<Function>在評估這個時調用Module
初始化import.meta
.meta
<import.meta>module
<vm.SourceTextModule>
importModuleDynamically
<Function>在評估此模塊時調用import()
叫做。如果未指定此選項,則調用import()
會拒絕ERR_VM_DYNAMIC_IMPORT_CALLBACK_MISSING
.specifier
<string> 說明符傳遞給import()
module
vm.ModuleimportAssertions
<Object>"assert"
值傳遞給optionsExpression
- 返回: <Module Namespace Object> | <vm.Module> 建議返回
vm.Module
以利用錯誤跟蹤,並避免包含then
函數導出的命名空間出現問題。
創建一個新的 SourceTextModule
實例。
分配給作為對象的 import.meta
對象的屬性可能允許模塊訪問指定 context
之外的信息。使用 vm.runInContext()
在特定上下文中創建對象。
import vm from 'node:vm'; const contextifiedObject = vm.createContext({ secret: 42 }); const module = new vm.SourceTextModule( 'Object.getPrototypeOf(import.meta.prop).secret = secret;', { initializeImportMeta(meta) { // Note: this object is created in the top context. As such, // Object.getPrototypeOf(import.meta.prop) points to the // Object.prototype in the top context rather than that in // the contextified object. meta.prop = {}; } }); // Since module has no dependencies, the linker function will never be called. await module.link(() => {}); await module.evaluate(); // Now, Object.prototype.secret will be equal to 42. // // To fix this problem, replace // meta.prop = {}; // above with // meta.prop = vm.runInContext('{}', contextifiedObject);
const vm = require('node:vm'); const contextifiedObject = vm.createContext({ secret: 42 }); (async () => { const module = new vm.SourceTextModule( 'Object.getPrototypeOf(import.meta.prop).secret = secret;', { initializeImportMeta(meta) { // Note: this object is created in the top context. As such, // Object.getPrototypeOf(import.meta.prop) points to the // Object.prototype in the top context rather than that in // the contextified object. meta.prop = {}; } }); // Since module has no dependencies, the linker function will never be called. await module.link(() => {}); await module.evaluate(); // Now, Object.prototype.secret will be equal to 42. // // To fix this problem, replace // meta.prop = {}; // above with // meta.prop = vm.runInContext('{}', contextifiedObject); })();
相關用法
- Node.js new assert.AssertionError(options)用法及代碼示例
- Node.js new AsyncResource(type[, options])用法及代碼示例
- Node.js new stream.Duplex(options)用法及代碼示例
- Node.js new stream.Readable([options])用法及代碼示例
- Node.js new Console(options)用法及代碼示例
- Node.js new URLSearchParams(obj)用法及代碼示例
- Node.js new crypto.Certificate()用法及代碼示例
- Node.js new stream.Writable([options])用法及代碼示例
- Node.js new URLSearchParams(iterable)用法及代碼示例
- Node.js new Agent([options])用法及代碼示例
- Node.js new stream.Transform([options])用法及代碼示例
- Node.js new PerformanceObserver(callback)用法及代碼示例
- Node.js new URL(input[, base])用法及代碼示例
- Node.js new URLSearchParams(string)用法及代碼示例
- Node.js new assert.CallTracker()用法及代碼示例
- Node.js net.isIP(input)用法及代碼示例
- Node.js net.createConnection(options[, connectListener])用法及代碼示例
- Node.js net.isIPv6(input)用法及代碼示例
- Node.js net.Server.address()用法及代碼示例
- Node.js net.createServer([options][, connectionListener])用法及代碼示例
- Node.js net.Server.listen()用法及代碼示例
- Node.js net.Socket.setTimeout(timeout[, callback])用法及代碼示例
- Node.js net.BlockList.check(address[, type])用法及代碼示例
- Node.js net.isIPv4(input)用法及代碼示例
- Node.js ServerHttp2Stream http2stream.pushStream(headers[, options], callback)用法及代碼示例
注:本文由純淨天空篩選整理自nodejs.org大神的英文原創作品 new vm.SourceTextModule(code[, options])。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。