我正在进入How to bulk convert some javascript code 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'
?什么是两者之间的差异,何时选择哪个?
答案 0 :(得分:3)
假设在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'
要求将名称导出'open'从fs导入名为open的局部变量。
所以现在你可以将它用作open('/home/demo.txt')
第3 强>
import fs from 'fs'
要求在我们的示例中导入fs类的本地fs变量中的'fs'的默认导出。
因此,当您执行const hotImport = require('hot-import')
时,它会从'hot-import'导入默认导出。因此,您无法直接将其用作hotImport(MODULE_FILE)
,而是可以hotImport.hotImport(MODULE_FILE)
您可以阅读有关destrucring的更多信息。
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