javascript 如何将这些模块的require语句改为import语句?

v9tzhpje  于 2023-02-15  发布在  Java
关注(0)|答案(4)|浏览(480)

由于Node版本11现在支持ES6,我希望停止对以下模块使用require()语句,但除了将express作为import语句之外,我找不到任何有关如何编写以下内容的文档:

import express from "express";
const http = require('http');
import bodyParser from 'body-parser';
const morgan = require('morgan');

对于morganhttp,它是否与bodyParser相同?
例如,对于morgan,我只看到:
import logger from 'morgan';
对于http,我只看到:
import * as http from 'http';

vptzau2j

vptzau2j1#

使用Node v12.2.0,我可以导入所有标准模块,如下所示:

import * as Http from 'http'
import * as Fs from 'fs'
import * as Path from 'path'
import * as Readline from 'readline'
import * as Os from 'os'

与我之前的做法相比:

const
  Http = require('http')
  ,Fs = require('fs')
  ,Path = require('path')
  ,Readline = require('readline')
  ,Os = require('os')

任何ECMAScript模块都可以导入,而不必使用.mjs扩展名,只要其package.json文件中包含此字段:

"type": "module"

因此,请确保将这样一个package.json文件与您正在制作的模块放在同一个文件夹中。
要导入未使用ECMAScript模块支持更新的模块,可以执行以下操作:

// Implement the old require function
import { createRequire } from 'module'
const require = createRequire(import.meta.url)

// Now you can require whatever
const
  WebSocket = require('ws')
  ,Mime = require('mime-types')
  ,Chokidar = require('chokidar')

当然,不要忘记这是使用模块导入实际运行脚本所必需的:

node --experimental-modules my-script-that-use-import.js

父文件夹需要这个package.json文件,脚本才不会抱怨导入语法:

{
  "type": "module"
}

如果您要使用的模块还没有更新为支持使用import语法导入,那么您除了使用require之外别无选择(但是对于我上面的解决方案,这不是问题)。

jfewjypa

jfewjypa2#

require是模块的主要语法(在Node中)。正如帕特里克Roberts提到的,你只能在.mjs(模块JS)文件中使用它们。require是你导入NPM包/节点模块的方式:

const express = require("express");
const http = require("http");
const bodyParser = require("body-parser");
const morgan = require("morgan");

如果您确实希望使用ES6 import/export,则需要使用.mjs,如下所述。

s8vozzvw

s8vozzvw3#

3个简单步骤:
1-在***package.json***文件中添加:

"type": "module",

2-在文件末尾使用此表达式导出要在其他文件中导入的函数

export default sampleFunctionNameToExport

3-* * 更改导入要求**在您需要导入已导出内容的文件中。

laawzig2

laawzig24#

我认为这有助于理解正在发生的事情:
从模块“http”中获取默认导出对象,并将其绑定到常量“http”:

const http = require('http')

从模块“http”导入对象“http”:

import http from 'http';

相关问题