我是newbie with node,redux,webpack并做出反应。我找到了这个例子:
http://rackt.org/redux/docs/introduction/Examples.html
我成功运行了Universal示例。但我的客户端不希望在生产中运行node.js服务器..无论如何我可以在构建时生成bundle.js并将所有内容上传到他们的服务器吗?
我找到的所有示例都使用webpack-dev-server(节点快速服务器),是否可以创建捆绑文件并将其作为简单的静态文件提供?
答案 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>