由于Node版本11现在支持ES6,我希望停止对以下模块使用require()
语句,但除了将express
作为import
语句之外,我找不到任何有关如何编写以下内容的文档:
import express from "express";
const http = require('http');
import bodyParser from 'body-parser';
const morgan = require('morgan');
对于morgan
和http
,它是否与bodyParser
相同?
例如,对于morgan
,我只看到:import logger from 'morgan';
对于http
,我只看到:import * as http from 'http';
4条答案
按热度按时间vptzau2j1#
使用Node v12.2.0,我可以导入所有标准模块,如下所示:
与我之前的做法相比:
任何ECMAScript模块都可以导入,而不必使用.mjs扩展名,只要其package.json文件中包含此字段:
因此,请确保将这样一个package.json文件与您正在制作的模块放在同一个文件夹中。
要导入未使用ECMAScript模块支持更新的模块,可以执行以下操作:
当然,不要忘记这是使用模块导入实际运行脚本所必需的:
父文件夹需要这个package.json文件,脚本才不会抱怨导入语法:
如果您要使用的模块还没有更新为支持使用import语法导入,那么您除了使用require之外别无选择(但是对于我上面的解决方案,这不是问题)。
jfewjypa2#
require
是模块的主要语法(在Node中)。正如帕特里克Roberts提到的,你只能在.mjs
(模块JS)文件中使用它们。require
是你导入NPM包/节点模块的方式:如果您确实希望使用ES6
import/export
,则需要使用.mjs
,如下所述。s8vozzvw3#
3个简单步骤:
1-在***package.json***文件中添加:
2-在文件末尾使用此表达式导出要在其他文件中导入的函数:
3-* * 更改导入要求**在您需要导入已导出内容的文件中。
laawzig24#
我认为这有助于理解正在发生的事情:
从模块“http”中获取默认导出对象,并将其绑定到常量“http”:
从模块“http”导入对象“http”: