gpt4 book ai didi

javascript - 如何在我的 javascript 应用程序中使用 Gulp 和 Browserify?

转载 作者:行者123 更新时间:2023-12-03 07:56:29 25 4
gpt4 key购买 nike

我终于尝试将现代构建系统引入我的应用程序,我希望有人可以提供帮助。我认为我需要一些范式转变。

这就是我的应用程序的结构:

/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文件写入目标

然后,应用程序的运行方式如下:

  • 打开index.html
  • 该页面请求 main.js
  • main.js请求libs.jscomps.js
  • 一切正常

但这就是我遇到的问题:这里的很多东西都依赖于其他全局的东西。 index.js等待comps.jslibs.js加载,然后调用 ReactDOM.render(<App />...) ,这意味着 ReactDOM 和 App 都需要是全局的。

现在我正在尝试添加需要 require() 的内容,我尝试使用 Browserify 来实现它。但 Browserify 获取需要 require 的代码,并以一种我相信不会使任何东西成为全局的方式将其包装起来。

我意识到我需要将我的应用程序转换为实际的模块,而不仅仅是一堆相互连接和调用的文件。而且我知道,从长远来看,避免全局变量将是一件好事。但我很难弄清楚如何做到这一点。

例如,我有超过 50 个 React 模块。添加 module.exports 好像不对到其中的每一个,然后将它们全部导入到主文件中。此外,/lib中的一些内容是不导出为模块的库,它们被设计为在 <head> 中运行标签,例如 Google 图表。

所以我想我的问题是:

  • 我的模块导出应该在哪里,它们如何适合我的 gulp 任务?我要连接然后导出吗?
  • 如何处理非模块的库?
  • 我的应用布局是否真的很糟糕,我只需要从头开始重组?

谢谢,并对兰布利问题表示歉意。

最佳答案

首先,您的文件结构没有任何问题。

其次,您能做的最好的事情就是遵循“一个模块,一个文件”规则。这确实意味着将 module.exportsexport default 添加到每个文件中。这就是很好的 JavaScript。但这并不意味着将它们全部导入到您的主文件中,这使我们:

第三,以模块化的方式思考。文件应该精确地requireimport它们需要的东西,而不是它们不需要的东西。例如,如果您的 App 使用 Page1 并且 Page1 使用 Page1Component1,那么您的导入应该这样工作:

App -> Page1 -> Page1Component1
-> Page1Component2
-> Page2 -> Page2Component1
-> ...

这确保了关注点分离,并保护您的代码免受以后容易触发的错误(例如嵌套依赖项更改带来的错误)。您的构建系统应该生成一个文件(但是您可以稍后如果需要通过分块等来解决性能问题)。

你是对的,在这种结构中,使用 Browserify 或 Webpack 将确保没有任何东西是全局的 - 这是一件好事(尽管我会注意到你可以明确地告诉他们公开组件,这有时是必要的对于图书馆)。

这样就留下了您无法控制且无法导入的库。这不适用于 Bootstrap、jQuery 或 React,它们都具有来自 NPM 的 require 模块。但假设您有一个未提及但无法通过 NPM 获得的库,您仍然可以使用 script 标记将其全局包含在 HTML 中,并告诉 BrowserifyWebpack公开它以供需要。

关于javascript - 如何在我的 javascript 应用程序中使用 Gulp 和 Browserify?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34777335/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com