JS Transforms (Transpilation)
The fbt comes with 2 babel transforms.
babel-plugin-fbt
The first is the babel-plugin-fbt
. Internally, it first transforms <fbt>
instances into their fbt(...)
equivalent. After which, it turns all fbt(...)
calls into fbt._(...)
calls with an intermediary payload as the first argument, and the runtime arguments to be passed in.
babel-plugin-fbt-runtime
This transform takes the intermediary payload and turns it into the object that the fbt._(...)
runtime expects.
Why are there 2 transforms?
Internally, Facebook actually consumes the output of the babel-plugin-fbt
at
build-time. We search for __FBT__
sentinels, generate an identifier (hash)
for the FBT payload, and store it for lookup later after generating the
translated payload in a separate process. At resource request time, we lookup
the payload identifier + locale
and replace the identifier inline in source
with the translated payload. Conceptually, we're performing the
FbtTranslations
lookup, but on the server-side before serving the JS resource.