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

Javascript 如何更改这些require语句,使这些模块改用import语句?,javascript,node.js,import,module,require,Javascript,Node.js,Import,Module,Require,我希望停止对以下模块使用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和http,它是否与bodyPa

我希望停止对以下模块使用
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
http
,它是否与
bodyParser
相同

例如,对于摩根,我只看到:

从“morgan”导入记录器

对于
http
我只看到:


import*作为“http”中的http

要求
是模块的主要语法(在节点中)。正如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
,如上所述。

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
,如上所述。

使用节点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'
// 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')
与我之前所做的相比:

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模块支持更新的模块,可以执行以下操作:

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'
// 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(但使用我的上述解决方案,这不是问题)。

使用节点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'
// 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')
与我之前所做的相比:

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模块支持更新的模块,可以执行以下操作:

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'
// 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(但对于我上面的解决方案,这不是问题)。

ES6仅支持扩展名为
.mjs
的文件使用node.js中的实验标志进行导入。如果该软件包不支持ES6模块语法,则您不能以这种方式导入。@PatrickRoberts,您能否将其添加为您的答案,谢谢。这并不是一个完整的答案。您仍然可以使用捆绑程序或模块加载程序(如汇总、webpack、babel等)使其工作。但在服务器端这样做是非常不典型的。@PatrickRoberts,我认为您一起分享的两条评论将是一个完整的答案。只有扩展名为
.mjs
的文件才支持使用node.js中的实验标志进行ES6导入。如果该软件包不支持ES6模块语法,则您不能以这种方式导入。@PatrickRoberts,您能否将其添加为您的答案,谢谢。这并不是一个完整的答案。您仍然可以使用捆绑程序或模块加载程序(如rollup、webpack、babel等)使其工作。但在服务器端这样做是非常不典型的。@PatrickRoberts,我认为您一起分享的两条评论将给出一个完整的答案。