3

我遇到了如何将一些 javascript 代码从导入批量转换为要求中未涵盖的案例?.

这是来自 npm 包的原始代码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'

? 两者有什么区别,什么时候选择哪个?

4

1 回答 1

6

假设在 fs 包中有 5 个可用的导出 fs 包如下

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 个被命名为导出。所以现在您可以将它们用作 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”的默认导出。

因此,当您这样做时,const hotImport = require('hot-import')它会从“热导入”导入默认导出。所以你不能直接使用它,hotImport(MODULE_FILE)而是你可以做 hotImport.hotImport(MODULE_FILE)

您可以阅读有关破坏的更多信息。

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
于 2018-03-06T06:32:26.047 回答