当前位置: 首页 > 知识库问答 >
问题:

如何更改这些require语句,使这些模块改用import语句?

洪宏硕
2023-03-14

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

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

是不是和morgan超文本传输协议一样?

例如morgan我只见过:

从'morgan'导入记录器;

对于http我只看到:

import*作为“http”中的http


共有2个答案

邓德本
2023-03-14

require是模块的主要语法(在节点中)。正如Patrick Roberts提到的,您只能将它们用于。mjs(模块JS)文件require是导入NPM包/节点模块的方式:

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

如果您确实希望使用ES6导入/导出,则需要使用。mjs,如下所述。

范楚
2023-03-14

使用节点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扩展,只要它的包中有这个字段。json文件:

"type": "module"

所以一定要把这样的包裹放进去。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"
}

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

 类似资料:
  • 我是Java编程的初学者。我是在编写一个基于prime checker的程序时遇到这个问题的。已经明确指出,; 编辑器中锁定的代码将使用一个或多个整数参数调用checkPrime方法。您应该以这样的方式编写checkPrime方法:代码只打印素数。请仔细阅读编辑器中给出的代码。也请不要使用方法重载! 我想知道下面的评论行w. r. t.下面的Java程序之后的声明的作用是什么? 它们在锁定代码中的

  • 如果你想要直接输入argv变量到你的程序中(避免在每次使用它时打sys.),那么你可以使用from sys import argv语句。如果你想要输入所有sys模块使用的名字,那么你可以使用from sys import *语句。这对于所有模块都适用。一般说来,应该避免使用from..import而使用import语句,因为这样可以使你的程序更加易读,也可以避免名称的冲突。

  • 我有一些多绑定代码,看起来像这样: 我也有一些代码,看起来像这样: Guice中有没有一种方法可以减少行数/重复次数? 编辑:不寻找像“使用for循环并迭代一组键”这样的答案。

  • 我的html文件中有这个脚本: 我得到以下错误:Uncapted SyntaxError:无法在模块外使用import语句 在后面的代码中: 我这样做是为了以后能够运行这一行:

  • 我正在使用NextJS与typescript,mongo Atlas,mongoose,node和Express。 当我运行node Pages/Server时,我收到以下错误:我已经上载了我的package.json文件,并且还添加了babel 从“express”导入express;^^^^^^ SyntaxError:不能在模块外部使用导入语句,位于wrapSafe(内部/modules/c

  • 问题内容: 我有一个ApolloServer项目给我带来麻烦,所以我认为我可能会更新它,并且在使用最新的Babel时遇到问题。我的“ index.js”是: 当我运行它时,出现错误“ SyntaxError:无法在模块外部使用import语句”。首先,我尝试做一些事情以说服TPTB *,这是一个模块(没有成功)。因此,我将“导入”更改为“需要”,并且此方法可行。 但是现在我在其他文件中有大约两打“