在浏览器中使用导入指令

时间:2018-11-29 07:40:43

标签: javascript java html babeljs

我想知道浏览器中是否可以使用?

客户端代码(简单的示例):

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title>Add React in One Minute</title>
  </head>
  <body>

    <h2>Add React in One Minute</h2>
    <p>This page demonstrates using React with no build tooling.</p>
    <p>React is loaded as a script tag.</p>

    <p>
      This is the first comment.
      <!-- We will put our React component inside this div. -->
      <div class="like_button_container" data-commentid="1"></div>
    </p>

  </body>
<script src="https://unpkg.com/react@16.3.2/umd/react.production.min.js"></script>
<script src="https://unpkg.com/react-dom@16.3.2/umd/react-dom.production.min.js"></script>

<script type="text/javascript">
import React, { Component } from 'react';

const e = createElement;
class LikeButton extends Component {
  constructor(props) {
    super(props);
    this.state = { liked: false };
  }
  render() {
    let isLiked = localStorage.getItem("likedState") || this.state.liked;
    if (isLiked) {
      return 'You liked comment number ' + this.props.commentID;
    }
    return e(
      'button',
      { onClick: () => { localStorage.setItem("likedState", true); this.setState({ liked: true })} },
      'Like'
    );
  }
}
document.querySelectorAll('.like_button_container')
  .forEach(domContainer => {
    const commentID = parseInt(domContainer.dataset.commentid, 10);
    ReactDOM.render(
      e(LikeButton, { commentID: commentID }),
      domContainer
    );
  });
</script>
</html>

在开始之前,我的JS脚本是在服务器端(Java)上进行转换的。这里的代码:

init("var babelWrapper=function(bwc){return Babel.transform(bwc," +
    "{" +
    "presets:['es2015', 'react', 'stage-1']," +
    "sourceMaps:" + (isDev ? "'inline'" : "false") + "," +
    "comments: " + isDev + "," +
    "plugins:['" + Optional.ofNullable(module)
        .map(s -> "transform-es2015-modules-" + s)
        .orElse(ARROW_SUPPORT_PLUGIN)
    + "']" +
    "}).code;}", javaScriptFileName());

如果我使用全局变量而不是导入,这可以工作,但是一旦我开始使用导入,浏览器就无法找到require函数。

我连接了requirejs库,并使用bad的amd模块,但是随后代码根本没有执行,并且在任何地方都没有错误(但是代码本身正在被编译)。浏览器有什么方法可以开始理解导入指令?

我不能使用Browserify和类似的东西,因为代码是在运行中,服务器上收集的,对于我所了解的这类事情,我需要连接Webpack。问题还在于,我接受的代码不在文件中,而是简单地以字符串形式出现。在我将代码转换后,将这行发送给客户端。

如果我使用脚本type =“ module”-相同的行为是amd + requirejs。

0 个答案:

没有答案
相关问题