【发布时间】:2016-01-13 21:26:56
【问题描述】:
我终于尝试将现代构建系统引入我的应用程序,我希望有人能提供帮助。我认为我需要进行一些范式转换。
这就是我的应用程序的结构:
/src
/components
/Base
/App.jsx
/Pages.jsx
/...
/Page1
/Page1Component1.jsx
/Page1Component2.jsx
/...
/Page2
/Page2Component1.jsx
/Page2Component2.jsx
/...
/...
/libs
/bootstrap.js
/jquery.js
/react.js
/...
/scripts
/index.js
/utils.js
/styles
/main.css
/html
/index.html
现在我已经设置了 gulp 来执行此操作:
- 创建一个新文件夹
/dest来放置所有内容 - 将
/scripts中的所有内容组合起来,命名为main.js,放入dest - 将
/libs中的所有内容合并,命名为libs.js,放入dest - 合并
/components中的所有内容,通过babel运行,命名为comps.js,放入dest - 复制一个
/html文件和一个/styles文件到dest
然后这是应用程序的运行方式:
- 打开
index.html - 该页面请求
main.js -
main.js请求libs.js和comps.js - 一切正常
但这是我遇到的问题:这里的很多东西都依赖于全局的其他东西。 index.js 等待 comps.js 和 libs.js 加载,然后调用ReactDOM.render(<App />...),这意味着 ReactDOM 和 App 都需要是全局的。
现在我正在尝试添加需要 require() 的内容,并尝试使用 Browserify。但是 Browserify 采用了需要 require 的代码,并以一种我相信使 nothing 全局化的方式将其包装起来。
我意识到我需要将我的应用程序变成实际的模块,而不仅仅是一堆相互连接和调用的文件。而且我知道从长远来看,避免使用全局变量将是一件好事。但我很难弄清楚如何做。
例如,我有超过 50 个 React 模块。将module.exports 添加到每一个中似乎是错误的,然后将它们全部导入主文件。此外,/lib 中的一些内容是不作为模块导出的库,它们被设计为在 <head> 标记中运行,例如 Google Charts。
所以我想我的问题是:
- 我的模块导出应该在哪里,它们如何适应我的 gulp 任务?我要连接然后导出吗?
- 如何处理不是模块的库?
- 我的应用程序布局真的很糟糕,我只需要从头开始重组吗?
谢谢,很抱歉这个乱七八糟的问题。
【问题讨论】:
-
这样想:
App只需要require它直接渲染的组件。这些组件中的每一个都只有requires 他们每个人都需要。所以是的,每个模块的module.exports都是正确的。 -
哦,这确实有些道理!所以 App 需要它渲染的组件,而每个组件都需要它们渲染的任何东西,而且它有点像这样的级联。每个组件都只是导出自己。非常感谢,这有助于我思考这个问题。
标签: javascript node.js module reactjs gulp