我刚刚开始研究一个与MongoDB接口的小型节点项目。但是,我似乎无法正确导入相关节点模块,即使我已通过npm
正确安装它们。
例如,以下代码抛出并出错,告诉我" express没有默认导出":
import express from "express";
但是,此代码有效:
const express = require("express");
所以我的问题是,导入和变量/需要方法的功能有何不同?我想修复困扰项目导入的任何内容,因为它似乎可能会导致其他问题。
答案 0 :(得分:40)
帮助我理解require
和import
之间差异的答案是Using Node.js require vs. ES6 import/export,其中包含一个简单的图表:
答案 1 :(得分:16)
require
和import
之间的主要区别在于require
会自动扫描node_modules
以查找模块,但import
来自ES6,惯于。但现在大多数人会使用 babel 来编译import
和export
,这会使import
与require
的行为相同,但未来的版本Node.js可能支持import
本身(实际上,实验版本已经做过),并且根据Node.js的说明判断,import
将不支持node_modules
,它基于ES6,并且必须指定模块的路径。
所以我建议您不要将import
与babel一起使用,但此功能尚未确认,将来可能会支持node_modules
,谁知道呢?
答案 2 :(得分:5)
让我举一个包含require&import的Express模块示例
-需要
var express = require('express');
-导入
import * as express from 'express';
因此,使用完上述任何语句后,我们将获得一个名为“ express”的变量。现在我们可以将'app'变量定义为
var app = express();
因此,我们将'require'与'CommonJS'结合使用,并将'import'与'ES6'结合使用。
有关“要求”和“导入”的更多信息,请仔细阅读以下链接。
需要-Requiring modules in Node.js: Everything you need to know
答案 3 :(得分:2)
我将简化它,
主要需求不同,整个JS文件被调用或导入。即使您不需要其中的一部分。
var myObject = require('./otherFile.js'); //This JS file will be imported fully.
在导入时,您只能提取所需的对象/函数/变量。
import { getDate }from './utils.js';
//Here I am only pulling getDate method from the file instead of importing full file
另一个主要区别是您可以在程序中的任何地方使用require
,因为import
应该始终位于文件顶部
答案 4 :(得分:1)
新版ES6:
'import'应该与'export'关键字一起使用,以在js文件之间共享变量/数组/对象:
export default myObject;
//....in another file
import myObject from './otherFile.js';
老套子:
'require'应该与'module.exports'一起使用
module.exports = myObject;
//....in another file
var myObject = require('./otherFile.js');
答案 5 :(得分:0)
这里没有答案,更像是评论,对不起,但我无法评论。
在节点V10中,可以使用标志SELECT sensor_1
FROM sensor_table
WHERE timestamp >= UNIX_TIMESTAMP($date_start)
AND
timestamp < UNIX_TIMESTAMP($date_stop)
AND
((timestamp - UNIX_TIMESTAMP($date_start)) % 600) BETWEEN 0 AND 4
ORDER BY timestamp;
来告诉Nodejs您要使用--experimental-modules
。但是您的输入脚本应以import
结尾。
请注意,这仍然是实验性的事情,不应用于生产。
.mjs
// main.mjs
import utils from './utils.js'
utils.print();
答案 6 :(得分:0)
import用于typescript(角度)。 在ES6(ExpressJs)中使用了require