能否在jsp中直接使用webpack打包的react components?

#1

就我浅薄的理解,在不使用nodejs的情况下,开发react组件一般是这种模式:
1.制作组件A。
2.在x.jsp中使用A,代码在x.js中。
3.在y.jsp中使用A,代码在y.js中。
4.在z.jsp中使用A,代码在z.js中。
5.打包x.js,y.js,z.js。
现在情况是这样的,我们这边有好几个开发地点,其中只有总部有webpack,再加上其他一些原因,想将开发步骤改成以下方式:
1.制作组件A。
2.打包A。
2.在x.jsp中使用A,代码在x.js中,直接使用babel在页面上解析。
3.在y.jsp中使用A,代码在y.js中,直接使用babel在页面上解析。
4.在z.jsp中使用A,代码在z.js中,直接使用babel在页面上解析。

我尝试了几种方法都失败了,页面上提示无法找到组件。比如A中的组件叫chart,浏览器报错chart is not defined。请问以上方案有可行性吗?

#2

使用webpack打包的组件本身只是js,我们通常都是直接在html使用script标签导入的,按理说,如果你使用了webpack,就可以在打包的时候先执行babel,这样就避免了在浏览器再次script babel,而webpack打包的文件是有执行顺序的,也就是依赖关系,你的js必然又一个核心模块,比如react等插件的打包模块,然后才是各个组件的打包模块,顺序是在每个.jsp页面先加载核心模块,然后在加载组件模块。

#3

恩……这个事情是这样的。
我这边公司的开发模式是这样(大体上不严谨的):
1.研发组做出组件A。
2.实施组在不同页面使用A。
这个项目后端比较传统,使用myeclispe,如果说实施组每写个js都要打一次包,就算用webpack热部署,对实施组的压力依然会很大。所以我们考虑让实施组直接使用A。
之前测试流程可行性的时候,测试的组件比较简单,没有使用其他插件,也没有使用import和model.export的语法,所以没有打包这个环节,整个流程还是可行的;后来正式开发时发现model.export必须打包,然后上述流程就不好用了。
我是想知道上述流程有没有可能性,是不是我这边使用有问题。

#4

我认为是可以做到的,比如你说的浏览器报错chart is not defined,那么应该检查chart文件哪里出了问题。

#5

Chart定义长这样:
import Series from './components/Series'; import ChartLine from './components/Line'; import ChartPie from './components/Pie'; import ChartBar from './components/Bar'; import ChartCloud from './components/Cloud'; import ChartMap from './components/Map'; import ChartGraph from './components/Graph'; import Chart from './components/Chart'; Chart.Series = Series; Chart.Line = ChartLine; Chart.Pie = ChartPie; Chart.Bar = ChartBar; Chart.Cloud = ChartCloud; Chart.Map = ChartMap; Chart.Graph = ChartGraph; export default Chart;

我把代码x:
ReactDOM.render( (<Chart {...options} onReady={this.ready}> <Chart.Line name="最高气温" data={[11, 11, 15, 13, 12, 13, 10]}/> <Chart.Line name="最低气温" data={[1, -2, 2, 5, 3, 2, 0]}/> </Chart>), document.getElementById('example') )
放在jsp上,引用Chart打包之后的js,不好用。
把代码x单列文件加上import打包,页面直接引用,好用。