node.js - nodejs 从 import 转换为 require

标签 node.js npm import module npm-request

我遇到了 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'

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

最佳答案

假设在 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 类。

因此,当您执行 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

关于node.js - nodejs 从 import 转换为 require,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49124250/

相关文章:

javascript - 如何检查本地 JavaScript 包是否是 Semver?

javascript - 忽略缺少的依赖项

r - 在构建包时导入除一个包外的所有功能

vue.js - Vuejs 在另一个组件中导入组件

javascript - 如何在命令行中运行 express js(node js) - linux

c++ - 如何通过 Node 插件导出数组数据

node.js - ".nvm"不在路径中 - Apple M1 Macbook

javascript - 递归调用异步函数

node.js - 预发布未按预期工作

java - Eclipse:导入中的双分号