首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从CommonJS动态导入ES模块

从CommonJS动态导入ES模块
EN

Stack Overflow用户
提问于 2020-07-28 01:26:04
回答 1查看 305关注 0票数 0

是否可以动态地从CommonJS导入ES模块,而不必将文件扩展名更改为mjs,如果可能的话,还可以使用旧的节点版本(比V13更早)?我正在创建一个CLI库,它将动态地从用户项目中导入文件,以便根据这些文件自动生成一些代码。

代码语言:javascript
复制
// bin.ts
// This file will be transpiled to CommonJS
const loadResourceFile = async (url: string) => {
  const resource = await import(url);
  return resource.default;
}
...
代码语言:javascript
复制
// rollup.config.js
import typescript from 'rollup-plugin-typescript2';
import pkg from './package.json';

const commonOutputOptions = {
  banner: '#!/usr/bin/env node',
  preferConst: true,
  sourcemap: true,
};

export default {
  input: 'src/bin.ts',
  output: [
    {
      ...commonOutputOptions,
      file: pkg.main,
      format: 'cjs',
    },
    {
      ...commonOutputOptions,
      file: pkg.module,
      format: 'esm',
    },
  ],
  external: [...Object.keys(pkg.dependencies || {})],
  plugins: [typescript()],
  inlineDynamicImports: true,
};
代码语言:javascript
复制
// resource.js
// This file will be a ES module
import a from './a';

export default {
   a,
   b: 'y',
}

提前谢谢你!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-28 01:57:58

使用vm (特别是)和文件系统是可能的,尽管我建议不要走这条路线,因为如果您不小心的话,它很快就会变成不可维护的混乱。

由于您的目标也是支持较早的nodejs版本,我建议您创建两个单独的包,这样您就不会混合CommonJS和ES模块。

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

https://stackoverflow.com/questions/63125759

复制
相关文章

相似问题

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