我想要一个这样的项目结构:
./app/package.json
./app/src/index.js
./widget1/package.json
./widget1/src/index.js
./widget2/package.json
./widget2/src/index.js
./widget3/package.json
./widget3/src/index.js
你可以猜到,这个项目就像 NPM 小部件子项目的聚合,而 appsrc
文件夹是真正的应用程序,它使用不同的小部件子项目。
我希望在小部件之间进行清晰而严格的分离,因为我目前的经验告诉我,即使我告诉他们,开发人员也倾向于在小部件之间引入不需要的循环依赖关系。
在实践中,所有这些小部件都是 ReactJS 小部件,其中大多数都有 3 个常见的 JS 库:React、JQuery 和 Lodash。有些不需要这 3 个库,有些需要额外的库packery
,例如. 他们绝对需要共享完全相同的通用库版本(因为显然我不希望在我的项目中使用不同版本的 React,也不希望增加我的包大小)。react-slick
react-date-picker
mocha
例如, -widget1
可能是 DatePicker 小部件,它依赖于 React + Lodash + react-date-picker
(npm lib,不是我的) - 应用程序项目可能依赖于 React + Redux + Normalizr + 所有小部件及其传递依赖项,例如react-date-picker
所有的小部件都将是展示组件,不需要更多花哨的依赖项。有些将只依赖于 React。有些可能有 Redux reducer,但由于它是普通的旧 JS 代码,因此不需要依赖项。
小部件的数量可能非常大,我不想在每次库更新时编辑 200 个 package.json 文件(但我最终可以使用一些代码来处理它)。
在里面widget1/src
时,应该禁止从widget2
. 如果一个小部件必须能够依赖于另一个小部件,则必须在客户端小部件的 package.json 中明确设置此依赖关系。
我应该能够使用 Webpack 构建并独立测试所有小部件。我还应该能够同时构建和测试整个项目,包括所有子项目,并拥有一个汇总的全局测试和代码覆盖率报告。
我不希望它给开发者带来不好的体验。React 和 Webpack 允许重新加载热代码。如果我的浏览器中有真正的应用程序并且我修改了小部件的代码,我应该能够实时看到更改,react-hot-loader
而不必运行 npm 命令或按 F5。
我寻找的是相当于 Java Maven 的dependencyManagement
系统,您通常在 parent 中为所有子项目设置版本POM
,并且版本以某种方式继承给所有子项目。所有子项目都不能互相看到(除非添加了显式依赖项),但它们可以说它们依赖于父项目中声明的库。所有的 lib 版本号都可以在父项目中设置。
使用 NPM 和 Webpack 可以做到这一点吗?
或者至少是接近它的东西?
谢谢