ES6 Transpilers中的导入/导出

Ven*_*t.R 6 javascript google-chrome transpiler ecmascript-6

这不是以下问题的重复,这些问题涉及浏览器特定问题.我期待一个答案是否import / export能在客户端工作.

  1. ECMA 6虽然启用了实验性js,但仍无法正常工作
  2. 如何在Chrome/Firefox中的ES6中导出变量?

//lib.js

export const sqrt = Math.sqrt;
export function square(x) {
    return x * x;
}
export function diag(x, y) {
    return sqrt(square(x) + square(y));
}
  
//main.js
  
"use strict";

import { square, diag } from 'lib';
console.log(square(11)); // 121
console.log(diag(4, 3)); // 5
Run Code Online (Sandbox Code Playgroud)
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Import Check</title>
</head>
<body>
<script type="text/javascript" src="main.js"></script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

我在Chrome中遇到错误:
在此输入图像描述

经测试的浏览器:谷歌Chrome版本47.0.2526.106

  1. 是否可以使代码在任何浏览器中工作?
  2. 可以说,我们选择了一个transpiler(BabelJS)并且编译了代码.请问import/ export文件代码片段将客户端或服务器端的工作(在节点服务器作为需要方法)?

Man*_*iel 4

MDN

注意:目前任何浏览器均未原生实现此功能。它在许多转译器中实现,例如 Traceur Compiler、Babel 或 Rollup。

例如,在代码片段上使用 babel 后,您将得到如下内容:

//lib.js

"use strict";

Object.defineProperty(exports, "__esModule", {
    value: true
});
exports.square = square;
exports.diag = diag;
var sqrt = Math.sqrt;
exports.sqrt = sqrt;

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

function diag(x, y) {
    return sqrt(square(x) + square(y));
}
//------ main.js ------
'use strict';

var _lib = require('lib');

console.log((0, _lib.square)(11)); // 121
console.log((0, _lib.diag)(4, 3)); // 5
Run Code Online (Sandbox Code Playgroud)

这段代码足以在 NodeJs 中使用。但要在浏览器中使用,您需要像 require.js 或 browserify 这样的东西。在这个plunker中我使用了require1k