2015-11-07 33 views
10

我已成功运行ReactJS.Net,包括使用ES6语法。ReactJS.net - 如何使用ES6模块

我正在使用默认的使用Babel的Jsx转换管道。 在浏览器中查看源代码,我可以看到ES6代码已被ReactJS.Net转换为ES5

我一直无法让模块工作。

浏览器给了我2个错误:

Uncaught ReferenceError: exports is not defined 
Uncaught ReferenceError: require is not defined 

如何使用ES6模块?

最简单的例子:

Lib.js

export function square(x) { 
    return x * x; 
} 

UserOfLib.js

import { square } from 'Lib'; 
console.log(square(11)); 

获取变换到这个(看着浏览器源):

库:

// @hash v3-AD133907ABEC5D32B3768A3AF2301FC9 
// Automatically generated by ReactJS.NET. Do not edit, your changes will be overridden. 
// Version: 2.0.1 (build 5e9476a) 
// Generated at: 08-Nov-15 6:40:26 AM 
/////////////////////////////////////////////////////////////////////////////// 
Object.defineProperty(exports, "__esModule", { 
    value: true 
}); 
exports.square = square; 

function square(x) { 
    return x * x; 
} 

UserOfLib:

// @hash v3-812C209AFED25C2B4507E5769B0D899B 
// Automatically generated by ReactJS.NET. Do not edit, your changes will be overridden. 
// Version: 2.0.1 (build 5e9476a) 
// Generated at: 08-Nov-15 6:40:26 AM 
/////////////////////////////////////////////////////////////////////////////// 
var _Lib = require('Lib'); 

console.log((0, _Lib.square)(11)); // 121 

回答

9

目前,ReactJS.Net不处理模块。如果你想使用模块,你需要使用一个模块打包器,例如Webpack或Browserify来将模块编译成vanilla JavaScript。在ReactJS.NET本身中实现对模块的支持是一项不重要的工作,因为它需要处理依赖关系并以正确的顺序加载模块,而像Webpack这样经过良好测试的解决方案已经存在。

+1

这两个可以与JSX处理结合使用吗? –