use*_*797 18 javascript babeljs react-native metro-bundler
我正在尝试弄清楚 React Native 的构建过程以及 Metro 捆绑器和 babeljs 到底做了什么。特别是允许我使用 ES5+ 语法。我发现一些消息来源似乎告诉我一些不同的事情。这消息来源说:
\n\n\n\n\nMetro 将所有 javascript 代码合并到一个文件中,并翻译\n 设备无法理解的任何 Javascript 代码(例如 JSX 或一些\n 较新的 javascript 语法)
\n
这个说:
\n\n\n\n\nReact Native 使用 Babel 将 React 语法和较新的 ES5+\n 语法转换为可以在不支持这些功能的 JavaScript 环境中运行的代码。
\n
所以现在我很困惑两者到底做了什么。我还在上面的源代码(和 Metro 文档)中找到了这一点:\n Metro。变换过程描述为:
\n\n\n\n\n所有模块都经过变压器。转换器负责将模块转换为目标平台可以理解的格式(例如 React Native)。模块的转换根据您拥有的核心数量并行进行。
\n
这听起来和 babel 应该对我做的转译一模一样,或者这是不同的东西?除此之外,我对捆绑过程的解决部分的工作原理以及它与其他步骤并行工作的确切方式感到困惑,但这也许是另一个问题的主题。
\n小智 25
对于所有东西如何协同工作(React-Native、Typescript、Metro、带有预设的 Babel)存在很多困惑。我将尝试描述它。
地铁分为三个不同的阶段:
解决方案:Metro 需要构建入口点所需的所有模块的图表。为了从另一个文件中查找所需的文件,Metro 使用解析器。事实上,这个阶段与转型阶段同时发生。
转换:所有模块都经过变压器。转换器负责将模块转换(转译)为目标平台(例如 React Native)可以理解的格式。模块的转换根据您拥有的核心数量并行进行。
序列化:一旦所有模块都被转换,它们就会被序列化。序列化器组合模块以生成一个或多个包。包实际上是组合成单个 JavaScript 文件的模块包。
因此,据我了解,Metro 在其转换步骤中使用了 Babel。我认为很多文档和解释中都缺少这条信息。没有关于这一点的信息!因此,Babel 使用插件告诉 Babel 要转译什么以及如何将 JavaScript 代码(例如 JSX 语法)从一种格式转译为另一种格式。在babel.config.js文件中可以看到,预设的名称是:metro-react-native-babel-preset,表示metro转换过程中对babel的使用。
module.exports = {
presets: ['module:metro-react-native-babel-preset'],
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7945 次 |
| 最近记录: |