首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nodejs -将mjs文件中的内容导入js文件,或者如何在mjs文件中使用require?

Nodejs -将mjs文件中的内容导入js文件,或者如何在mjs文件中使用require?
EN

Stack Overflow用户
提问于 2021-01-19 00:58:10
回答 1查看 7K关注 0票数 8

我是JS和Node的新手。据我所读,它看起来像是ES6 import is not supported in Node,所以我不得不使用experiment mode (renaming my file to mjs)

除非mjs文件需要使用require,否则这在很大程度上是可行的。我的当前解决方案是将依赖于要求分离的.js文件的代码块分解出来,并导入该js文件。

foo.mjs

代码语言:javascript
复制
import readFileSync from './util.js'
... 
//orignally just do require('fs') and do fs.readFileSync()
const configFile = readFileSync(configFilePath);

util.js

代码语言:javascript
复制
const fs = require('fs');
const path = require('path');

function readFileSync(filePath) {
  console.log(__dirname)
  console.log(path.resolve(__dirname, filePath))
  return fs.readFileSync(path.resolve(__dirname, filePath), 'utf8');
}

module.exports = readFileSync

有什么办法可以避免这样做吗?我的app.js有很多require,我不想把所有这些部分分解成单独的js文件。

我试着改变要求导入

代码语言:javascript
复制
// const express = require('express');
import * as express from 'express';

但是当运行node --experimental-modules app.mjs

我犯了个错误

代码语言:javascript
复制
TypeError: express is not a function

我想我也需要

  • 找到在mjs
  • 中使用require的方法,或者找到将mjs中的内容导入js文件

的方法。

EN

回答 1

Stack Overflow用户

发布于 2021-01-19 01:03:43

你有三个不错的选择:

  • 使用Babel或TypeScript实现两种类型模块之间的互操作性,
  • 编写一个小包装器来重新定义ESM代码中的require
  • 使用CJS中的import() (动态导入)导入ESM代码

在ESM代码中使用require的包装器:

代码语言:javascript
复制
import { createRequire } from 'module'
const require = createRequire(import.meta.url)
const cjsFile = require('./test') // test is regular .js file using module.exports

动态进口:

代码语言:javascript
复制
// foo.mjs:
export const foo = () => true
// index.js:
import('./foo.mjs').then(x => console.log(x.foo()))

具有混合模块类型的大型项目经常使用Babel和/或TypeScript,两者都可以很好地处理混合类型。巴贝尔会更容易学习和建立起来。但是,如果您没有大量的代码需要处理,那么createRequire方法就能正常工作。

至于Express的问题,它失败了,因为默认的导出是您想要的:import express from 'express',而不是import * as express...

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65784124

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档