nodejs从import转换为require

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nodejs从import转换为require相关的知识,希望对你有一定的参考价值。

我正在进入一个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包中,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

以上是关于nodejs从import转换为require的主要内容,如果未能解决你的问题,请参考以下文章

从nodejs,es6,typescript方面去弄清楚exports,require,export,import,export=

NodeJS中的require和import

NodeJS中的require和import

nodejs从缓冲区数据转换为字节数组

mongodb nodejs - 转换圆形结构

使用nodejs AWS lambda从S3加载并解析yaml文件