由于节点版本11现在支持ES6,因此我希望不再对以下模块使用require()
语句,但是除了express
作为{{1之外,我无法找到关于如何编写以下内容的任何文档。 }}语句:
import
与import express from "express";
const http = require('http');
import bodyParser from 'body-parser';
const morgan = require('morgan');
和bodyParser
的{{1}}一样吗?
例如morgan
,我只看到:
http
对于morgan
,我只看到:
import logger from 'morgan';
答案 0 :(得分:1)
require
是模块的主要语法(在Node中)。正如Patrick 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
,如here所述。
答案 1 :(得分:0)
使用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之外,您别无选择(但是上面的解决方案没有问题)。