【问题标题】:How do I change these require statements for these modules to use import statements instead?如何更改这些模块的这些 require 语句以使用 import 语句?
【发布时间】:2019-09-23 15:50:05
【问题描述】:

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

import express from "express";
const http = require('http');
import bodyParser from 'body-parser';
const morgan = require('morgan');

morganhttpbodyParser 一样吗?

例如morgan我只见过:

import logger from 'morgan';

对于http,我只见过:

import * as http from 'http';

【问题讨论】:

  • ES6 使用 node.js 中的实验标志导入仅支持具有 .mjs 扩展名的文件。如果包不支持 ES6 模块语法,那么你不能那样导入它。
  • @PatrickRoberts,您能否将其添加为您的答案,谢谢。
  • 这并不是一个完整的答案。你仍然可以使用打包器或模块加载器(如 rollup、webpack、babel 等)使其工作,但在服务器端这样做是非常不典型的。
  • @PatrickRoberts,我认为你分享的两个 cmets 会给出一个完整的答案。

标签: javascript node.js import module require


【解决方案1】:

使用 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"
}

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

【讨论】:

    【解决方案2】:

    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 所述。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-23
      • 2015-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-09
      • 1970-01-01
      相关资源
      最近更新 更多