如何将ES6,AMD和CJS模块与JSPM和系统js一起使用?

时间:2015-07-17 09:23:08

标签: javascript amd commonjs jspm es6-module-loader

我正在尝试JSPM,因此我正在尝试系统JS,因为我觉得在我的应用程序中使用ES6功能(例如模块)有很多价值。但是,我希望能够同时使用CJS和AMD管理我的模块。以下是我的主app文件中的代码示例,其中我尝试加载并运行CJS模块和ES6模块:

//CJS
var cjsmodule = require('./modules/cjs-module');
var cjs = cjsmodule();
cjs.init();

//ES6
import { square } from './modules/es6-module';
console.log(square(11));

但我收到了错误

Potentially unhandled rejection [2] TypeError: require is not a function 

如果我只使用一种方法,则应用程序运行时没有错误。有谁知道是否有可能让ES6,CJS和AMD在使用JSPM的同一个应用程序中生活在一起?

如果不这样做,是否有人可以推荐一个同时支持所有三种方法的替代模块加载器库?

1 个答案:

答案 0 :(得分:0)

这是一个老问题,但我在试图弄清楚如何使用几个不同模块样式的包时发现了它。希望这个答案可以节省一些时间。

JSPM可以处理各种格式的包:CommonJS,AMD,ECMA2016模块和全局。安装软件包时,您可以指定一个覆盖来告诉JSPM如何加载软件包,例如jspm install npm:your-mad-package-name-here -o "{format: 'cjs|amd|esm|global'}"其中单引号中的值对应于包的依赖项类型。使用包暴露的类型只需要导入它们import typeNameHere from "your-amd-package-name-here";,其中typeNameHere对应于默认或导出的类型。 (根据模块类型,暴露的内容以及您想要使用的内容,围绕导入内容可能会有一点学习曲线。)