Bündelung mit formatjs
Diese Seite wurde von PageTurner AI übersetzt (Beta). Nicht offiziell vom Projekt unterstützt. Fehler gefunden? Problem melden →
Nachdem Sie nun eine funktionierende Pipeline haben, ist es an der Zeit, tiefer in die Optimierung des Builds mit formatjs einzusteigen. Im Leitfaden zur Nachrichtenextraktion raten wir ausdrücklich von expliziten IDs ab, da sie in großen Anwendungen zu Kollisionen führen können. Zwar kann unser Extrahierer IDs in die extrahierte JSON-Datei einfügen, Sie müssen diese IDs jedoch auch in die kompilierte JS-Ausgabe einfügen. Dieser Leitfaden erklärt, wie Sie das erreichen.
Verwendung von babel-plugin-formatjs
- npm
- yarn
npm i -D babel-plugin-formatjs
yarn add -D babel-plugin-formatjs
Betrachten wir dieses einfache Beispiel:
import {FormattedMessage} from 'react-intl'
<FormattedMessage
description="A message"
defaultMessage="My name is {name}"
values={{
name: userName,
}}
/>
Zur Laufzeit wird dies einen Error mit der Meldung ID is required auslösen. Um eine ID in den transpilierten JS-Code einzufügen, können Sie unser babel-plugin-formatjs wie folgt verwenden:
babel.config.json
{
"plugins": [
[
"formatjs",
{
"idInterpolationPattern": "[sha512:contenthash:base64:6]",
"ast": true
}
]
]
}
Dies erzeugt den folgenden JS-Code
const {FormattedMessage} = require('react-intl')
React.createElement(FormattedMessage, {
id: '179jda',
defaultMessage: 'My name is {name}',
values: {
name: userName,
},
})
Unser Plugin entfernt auch description, da dies nur für Übersetzer und nicht für Endnutzer bestimmt ist.
Verwendung von @formatjs/ts-transformer
- npm
- yarn
npm i -D @formatjs/ts-transformer
yarn add -D @formatjs/ts-transformer
Wenn Sie TypeScript verwenden, sollten Sie für benutzerdefinierte AST-Transformationen Tools wie ts-patch, ts-loader oder ähnliche in Betracht ziehen.
Betrachten wir dieses einfache Beispiel:
import {FormattedMessage} from 'react-intl'
<FormattedMessage
description="A message"
defaultMessage="My name is {name}"
values={{
name: userName,
}}
/>
ts-loader
Sie können dies in Ihrer Webpack-Konfiguration für ts-loader hinzufügen.
import {transform} from '@formatjs/ts-transformer'
// webpack config
module.exports = {
rules: [
{
test: /\.tsx?$/,
use: [
{
loader: 'ts-loader',
options: {
getCustomTransformers() {
return {
before: [
transform({
overrideIdFn: '[sha512:contenthash:base64:6]',
}),
],
}
},
},
},
],
exclude: /node_modules/,
},
],
}
Dies erzeugt den folgenden JS-Code
const {FormattedMessage} = require('react-intl')
React.createElement(FormattedMessage, {
id: '179jda',
defaultMessage: 'My name is {name}',
values: {
name: userName,
},
})
Unser Transformer entfernt auch description, da dies nur für Übersetzer und nicht für Endnutzer bestimmt ist.