使用Node.js 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扩展名,只要它的包中有这个字段。json文件:
"type": "module"
所以一定要放一个这样的包。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')
当然,不要忘记这是使用模块导入实际运行脚本所需要的(在v13.2之后不需要了):
node --experimental-modules my-script-that-use-import.js
父文件夹需要这个包。Json文件,该脚本不抱怨导入语法:
{
"type": "module"
}
如果您想要使用的模块还没有更新到支持使用import语法导入,那么您除了使用require别无选择(但对于上面的解决方案,这不是问题)。
我还想分享这段代码,它实现了模块中缺少的__filename和__dirname常量:
import {fileURLToPath} from 'url'
import {dirname} from 'path'
const __filename = fileURLToPath(import.meta.url)
const __dirname = dirname(__filename)