【问题标题】:nodejs convert from import to requirenodejs 从 import 转换为 require
【发布时间】:2018-08-13 22:08:03
【问题描述】:

我正在处理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'

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

【问题讨论】:

    标签: node.js npm import module npm-request


    【解决方案1】:

    假设在 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”的所有命名导出。上面 sn-ps 中的前 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)

    您可以阅读有关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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-05
      • 2016-08-20
      • 2022-11-17
      • 2018-10-26
      • 1970-01-01
      • 2021-10-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多