需要不带 Browserify、Webpack 或 Babel 的 reactjs module

IT技术 javascript reactjs typescript commonjs
2021-04-29 16:00:01

我正在尝试在 Visual Studio 中设置 TypeScript HTML 应用程序。我想使用 reactjs v0.14.7

我想避免使用像 Browserify 这样的工具。

但是,如何使用react-dommodule呢?

让我们暂时忘记typescript。我需要先启动并运行纯 ES5。

目前,我有这个:

<script src="Scripts/react/react.js"></script>
<script src="Scripts/react/react-dom.js"></script>
<script>
    var Button = React.createClass({
        render: function () {
            return (React.createElement("div", { className: "btn btn-default" }, 'hello world'));
        }
    });
    ReactDOM.render(React.createElement('Button'), document.getElementById('container'));
</script>

然而,浏览器抱怨,ReactDOM 对象不存在。

我努力了:

<script src="Scripts/require.js"></script>
<script src="Scripts/react/react.js"></script>
<script src="Scripts/react/react-dom.js"></script>
<script>
   var React = require('react');
   var ReactDOM = require('react-dom');
   ....
</script>

但是,它不适用于 require.js:尚未为上下文加载module名称“react”:_。使用 require([])

有人可以给这个带来更多的光吗?如何在没有任何服务器端工具(如捆绑、转译等)的情况下使用 React。

不会接受像“使用 npm”这样的答案作为答案。

3个回答

RequireJSRequireJSrequire是非常不同的东西 - 稍后会详细介绍。

如果你想在没有 Browserify 或 Webpack 等工具的情况下使用 React,那么你不一定需要module加载器。React 和 ReactDOM 的托管版本将公开您可以开箱即用的全局变量。

<script src="https://fb.me/react-0.14.7.js"></script>
<script src="https://fb.me/react-dom-0.14.7.js"></script>
<script>
console.log(React, ReactDOM);
</script>

如果您想在本地使用它们,只需下载这些文件。

系统JS

所有这些,听起来SystemJSJSPM可能正是您正在寻找的。

首先用于jspm安装您的软件包。

jspm install systemjs react react-dom

然后链接和配置SystemJS。

<script src='jspm_packages/system.js'></script>
<script>
  System.import('app.js');
</script>

现在app.js你可以在里面编写 CommonJS 风格的代码了。

var React = require('react');
var ReactDOM = require('react-dom');

SystemJS 将处理其余脚本的加载。如果您想进行生产构建,那么就像运行jspm bundle app.

通用JS

require您在 React 教程和其他示例中看到的调用是针对名为CommonJS的module格式的

您用于require('react')获取对 React module(node_modules与 npm 一起安装导出的值的引用这意味着您需要像 Browserify 或 Webpack 这样的浏览器前构建步骤,它可以将您需要的所有module装订在一起并输出一个大脚本文件。

要求JS

令人困惑的是,CommonJS 和 RequireJS 使用同名的函数来指定依赖项。您正在尝试使用 RequireJSrequire函数,就像您在使用 CommonJS module一样。

如果你想用 RequireJS 导入 React,那么你需要像这样:

<script src="js/require.js"></script>
<script>
  require.config({
    'baseUrl' : 'Scripts/',
  });
  require(["react-0.14.7", "react-dom-0.14.7"],
  function(React, ReactDOM) {
    console.log(React, ReactDOM);
  });
</script>

当您的代码执行时,RequireJS 将关闭并为您指定的module添加脚本标签。然后一旦这些脚本加载完毕,它就会将它们导出的值传递到回调函数中供您使用。

这是 Redux 的创建者 Dan Abramov 本人的一个例子,他在其中制作了一个 React 应用程序,而无需使用 webpack、babel 或 browserify。

http://codepen.io/gaearon/pen/ZpvBNJ?editors=0010

在你的 body 标签内的 HTML 文件中写入

<div id="root">
   <!-- This div's content will be managed by React. -->
</div>

在你的脚本标签中输入这个

ReactDOM.render(
  <h1>Hello, world!</h1>,
  document.getElementById('root')
);

PS确保您在顶部包含这 2 个库

https://cdnjs.cloudflare.com/ajax/libs/react/15.3.1/react.js
https://cdnjs.cloudflare.com/ajax/libs/react/15.3.1/react-dom.js

希望能帮助到你。

看看这个项目

https://github.com/ORESoftware/hr4r2

它正在做你想做的事情——它使用 RequireJS + React + TypeScript。它正在做服务器端渲染并且是一个 SPA。

这个项目没有使用 Webpack 或 Babel。