我可以在没有捆绑的情况下使用CommonJS + TypeScript和React吗?

时间:2017-03-14 08:25:03

标签: javascript typescript requirejs amd commonjs

我尝试使用CommonJS + TypeScript和React,但在加载初始代码时遇到了以下问题:

的index.html

  <script type="text/javascript">
          function loadScript(url)
          {    
              var head = document.getElementsByTagName('head')[0];
              var script = document.createElement('script');
              script.type = 'text/javascript';
              script.src = url;
              head.appendChild(script);
          }


          loadScript('./Scripts/react.js');

          loadScript('./Scripts/react-dom.js');

          loadScript('./Scripts/require.js');

          loadScript('./Scripts/index.js');

    </script>

加载文件:index.ts

        var rootElement;

        function _onLoad() {
            rootElement = rootElement || document.getElementById('root');
            ReactDOM.render(React.createElement(DataSample, null), rootElement);
        }
        function _onUnload() {
            if (rootElement) {
                ReactDOM.unmountComponentAtNode(rootElement);
            }
        }
        var isReady = document.readyState === 'interactive' || document.readyState === 'complete';
        if (isReady) {
            _onLoad();
        }
        else {
            window.onload = _onLoad;
        }
        window.onunload = _onUnload;

错误:             *未捕获的ReferenceError:未定义require                在index.tsx:1            import * as React from'reaction'; *

我确实安装了webpack,我可以创建捆绑包,但老实说我不想这样做,因为这是我的开发,没有理由为我的开发做到这一点。

我知道我可以使用AMD,但是,男孩!在开发环境让我遇到很多问题后,我对AMD非常生气。

我是否需要使用任何其他装载机?我使用now,requirejs,默认情况下我知道/为AMD设计。

提前感谢。

1 个答案:

答案 0 :(得分:0)

是的 - 绝对。

如果没有特别要求,你可以(并且在我非常谦虚的意见中)没有捆绑商。

至于现在的浏览器不支持开箱即用的模块加载,因此您需要一个模块加载器。我建议使用systemjs而不是requirejs。它有更广泛的传播和负载任何你可以抛出它。以下是example如何设置的问题,以及类似的问题here。这会让你前进。

作为旁注。我建议你使用JSPM而不是直接使用SystemJS。在内部,它正在使用systemjs,但为那里的所有不同模块的配置消除了麻烦。看看:example