没有nodejs服务器运行redux示例?

时间:2016-01-07 14:45:03

标签: node.js reactjs webpack redux

我是newbie with node,redux,webpack并做出反应。我找到了这个例子:

http://rackt.org/redux/docs/introduction/Examples.html

我成功运行了Universal示例。但我的客户端不希望在生产中运行node.js服务器..无论如何我可以在构建时生成bundle.js并将所有内容上传到他们的服务器吗?

我找到的所有示例都使用webpack-dev-server(节点快速服务器),是否可以创建捆绑文件并将其作为简单的静态文件提供?

5 个答案:

答案 0 :(得分:1)

它并不像您想象的那么简单,因为服务器生成的视图可以是动态的。所以你需要一些机制来在服务器上运行javascript。

但是,正如this blog post详细阐述的那样,您可以使用Nashorn JavaScript引擎在服务器上呈现反应组件。这样,您的javascript引擎嵌入在JVM中,您不必运行单独的节点进程。

答案 1 :(得分:1)

我面临同样的问题。我想将基于jsp视图的Spring MVC应用程序迁移到Redux / React客户端,其中Spring作为客户端webapp的数据API /后端,但具有服务器端渲染优势(通用javascript)。

对于角度应用程序(仅限客户端js),可以很容易地为浏览器提供捆绑包,然后通过ajax与后端进行通信,但是在服务器端渲染时,一切都变得更加复杂。

我问自己的两个问题是:它真的值得所有额外的复杂性和建筑设置和维护工作吗?我的创新是否会因为新的开发功能和生产中可能存在的问题/错误而导致我的项目日常出现问题?

如果您的客户不会欣赏或者真正从(从非技术角度来看)获得很多价值(服务器端渲染架构),那么为您提供额外的复杂框架可能不是最佳选择项目

祝你好运!

答案 2 :(得分:1)

您可以尝试redux-auto

  

redux-auto:Redux变得简单(使用即插即用方法)。   在设置商店时删除样板代码&操作

example设置了即时设置+热重新加载。

您只需要运行npm install然后npm start

答案 3 :(得分:0)

如果您打算运行一个通用应用程序 - 一个在服务器上预呈现并在客户端上运行的应用程序(如repo中的通用示例) - 那么不,您必须运行Node.js才能进行服务器呈现。您可以轻松导出单个捆绑包以在客户端端运行应用程序,但要在服务器端运行它,您需要一个可以实际运行它的服务器技术,像Node。

答案 4 :(得分:0)

我创建了一个fidlle。 https://jsfiddle.net/parthmakadiya12/z8dLrhqv/2/ 不建议将其用于现实世界中的实现。

<html>

<head>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/redux/3.6.0/redux.min.js"></script>
</head>

<body>
    <div>
        Counter:
        <span id="counter"></span>
    </div>
    <button id="inc">Increment</button>
    <button id="dec">Decrement</button>
</body>
<script>
    function reducer(state, action) {
        switch (action.type) {
            case 'INC':
                return {...state, counter: action.payload
                };
            case 'DEC':
                return {...state, counter: state.counter - 1
                };
            default:
                return state;
        }
    }
    const initialState = {
        counter: 0
    }
    const store = Redux.createStore(reducer, initialState);

    function upDateData() {
        document.getElementById('counter').innerText = store.getState().counter;
    }
    store.subscribe(upDateData)
    document.getElementById('inc').onclick = () => {
        store.dispatch({
            type: 'INC',
            payload: store.getState().counter + 1
        });

    };
    document.getElementById('dec').onclick = () => {
        store.dispatch({
            type: 'DEC'
        })
        payload: store.getState().counter + 1
    };
</script>

</html>