nodejs 从 import 转换为 require
nodejs convert from import to require
我正在处理 中未涵盖的案例。
这里是 original code from npm package hot-import
:
import * as assert from 'assert'
import * as fs from 'fs'
import * as path from 'path'
import hotImport from 'hot-import'
我将它们转换为,
const assert = require('assert')
const fs = require('fs')
const path = require('path')
const hotImport = require('hot-import')
const hotMod = await hotImport(MODULE_FILE)
但得到了:
TypeError: hotImport is not a function
经过大量的反复试验,我发现 const { hotImport } = require('hot-import')
有效,但我不知道为什么。
有人可以总结一下,什么时候用const hotImport = require('hot-import')
,什么时候用const { hotImport } = require('hot-import')
吗?
还有相关的,为什么演示代码使用,
import * as fs from 'fs'
而不是
import fs from 'fs'
?两者之间有什么区别,什么时候选择哪个?
假设在 fs 包中有 5 个导出可用,如下所示
export const readFile = _readFile;
export const appendFile = _appendFile;
export const writeFile = _writeFile;
export const open = _open;
export default fs; // fs class
现在,
1.
import * as fs from 'fs'
要求将来自 'fs' 的所有命名导出导入一个名为 fs 的局部变量。上面片段中的前 4 个被命名为 exports。所以现在您可以将它们用作 fs.open('/home/demo.txt')
或 fs.writeFile('/home/demo.txt',...)
2.
import { open } from 'fs'
要求将名称 export 'open' 从 fs 导入到名为 open 的局部变量中。
所以现在您可以将其用作 open('/home/demo.txt')
3.
import fs from 'fs'
要求在本地 fs
变量中导入 'fs' 模块的默认导出,在我们的示例中是 fs
class。
因此,当您执行 const hotImport = require('hot-import')
时,它会从 'hot-import' 导入默认导出。所以不能直接用hotImport(MODULE_FILE)
,而是可以用hotImport.hotImport(MODULE_FILE)
.
您可以阅读有关 destructuring 的更多信息。
const person = {
first: 'Ridham',
last: 'Tarpara',
country: 'India',
city: 'Ahmedabad',
twitter: '@ridhamtarpara'
};
如果你有 person 对象,那么下面的两个代码将是相同的
const first = person.first; // Ridham
const last = person.last; // Tarpara
const { first, last } = person; // first = Ridham, last = Tarpara
我正在处理
这里是 original code from npm package hot-import
:
import * as assert from 'assert'
import * as fs from 'fs'
import * as path from 'path'
import hotImport from 'hot-import'
我将它们转换为,
const assert = require('assert')
const fs = require('fs')
const path = require('path')
const hotImport = require('hot-import')
const hotMod = await hotImport(MODULE_FILE)
但得到了:
TypeError: hotImport is not a function
经过大量的反复试验,我发现 const { hotImport } = require('hot-import')
有效,但我不知道为什么。
有人可以总结一下,什么时候用const hotImport = require('hot-import')
,什么时候用const { hotImport } = require('hot-import')
吗?
还有相关的,为什么演示代码使用,
import * as fs from 'fs'
而不是
import fs from 'fs'
?两者之间有什么区别,什么时候选择哪个?
假设在 fs 包中有 5 个导出可用,如下所示
export const readFile = _readFile;
export const appendFile = _appendFile;
export const writeFile = _writeFile;
export const open = _open;
export default fs; // fs class
现在,
1.
import * as fs from 'fs'
要求将来自 'fs' 的所有命名导出导入一个名为 fs 的局部变量。上面片段中的前 4 个被命名为 exports。所以现在您可以将它们用作 fs.open('/home/demo.txt')
或 fs.writeFile('/home/demo.txt',...)
2.
import { open } from 'fs'
要求将名称 export 'open' 从 fs 导入到名为 open 的局部变量中。
所以现在您可以将其用作 open('/home/demo.txt')
3.
import fs from 'fs'
要求在本地 fs
变量中导入 'fs' 模块的默认导出,在我们的示例中是 fs
class。
因此,当您执行 const hotImport = require('hot-import')
时,它会从 'hot-import' 导入默认导出。所以不能直接用hotImport(MODULE_FILE)
,而是可以用hotImport.hotImport(MODULE_FILE)
.
您可以阅读有关 destructuring 的更多信息。
const person = {
first: 'Ridham',
last: 'Tarpara',
country: 'India',
city: 'Ahmedabad',
twitter: '@ridhamtarpara'
};
如果你有 person 对象,那么下面的两个代码将是相同的
const first = person.first; // Ridham
const last = person.last; // Tarpara
const { first, last } = person; // first = Ridham, last = Tarpara