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

Dan*_*iel 5 javascript import module require node.js

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

import express from "express";
const http = require('http');
import bodyParser from 'body-parser';
const morgan = require('morgan');
Run Code Online (Sandbox Code Playgroud)

bodyParser它与formorgan和相同吗http

例如morgan我只见过:

import logger from 'morgan';

因为http我只看到:

import * as http from 'http';

Joa*_*sen 8

使用 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'
Run Code Online (Sandbox Code Playgroud)

与我之前所做的相比:

const
  Http = require('http')
  ,Fs = require('fs')
  ,Path = require('path')
  ,Readline = require('readline')
  ,Os = require('os')
Run Code Online (Sandbox Code Playgroud)

任何属于 ECMAScript 模块的模块都可以导入,而无需使用 .mjs 扩展名,只要它的 package.json 文件中包含此字段即可:

"type": "module"
Run Code Online (Sandbox Code Playgroud)

因此,请确保将这样的 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')
Run Code Online (Sandbox Code Playgroud)

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

node --experimental-modules my-script-that-use-import.js
Run Code Online (Sandbox Code Playgroud)

并且父文件夹需要此 package.json 文件,以便该脚本不会抱怨导入语法:

{
  "type": "module"
}
Run Code Online (Sandbox Code Playgroud)

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


Jac*_*ord 0

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

const express = require("express");
const http = require("http");
const bodyParser = require("body-parser");
const morgan = require("morgan");
Run Code Online (Sandbox Code Playgroud)

如果您确实希望使用 ES6 import/export,则需要.mjs按照此处所述进行使用。