Razzle: рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд░рдирд╛

рдХреЛ рдирд┐рд░реНрдорд┐рдд 14 рдЕрдкреНрд░реИрд▓ 2019  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: jaredpalmer/razzle

рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдмрдбрд╝реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИ рдФрд░ рдореИрдВ рдПрдХ рдмрд╛рд░ рдореЗрдВ рдЯрд╛рдЗрдкрдкреНрд░рддрд┐ рдПрдХ рдШрдЯрдХ рдореЗрдВ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рдореИрдВрдиреЗ рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ --with-typescript рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдПрдХ рд╣реА рдмрд╛рд░ рдореЗрдВ рд╕рднреА рдлрд╛рдЗрд▓реЛрдВ рдХрд╛ рдирд╛рдо рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореИрдВ рдзреАрд░реЗ-рдзреАрд░реЗ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рдлрд╛рдЗрд▓реЗрдВ рдЕрдкрдирд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд░рдЦреЗрдВ рдЬрдмрдХрд┐ рдирдИ рдлрд╛рдЗрд▓реЗрдВ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рд╛рдЗрд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рдЕрдкрдирд╛рдПрдВред

рдореИрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ razzle рдореЗрдВ рдХреИрд╕реЗ рдЬрд╛ рд╕рдХрддрд╛ рд╣реВрдВ?

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдврд╝реВрдБрдв рдирд┐рдХрд╛рд▓рд╛!

npm i -D @babel/preset-typescript ts-loader typescript

@babel/typescript рдХреЛ .babelrc . рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ

"presets": [
    "razzle/babel",
    "@babel/typescript"
]

рдЗрд╕реЗ razzle.config.js . рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ

config.resolve.extensions = config.resolve.extensions.concat(['.ts', '.tsx']);
config.module.rules.push({ test: /\.tsx?$/, loader: 'ts-loader' });

рдПрдХ tsconfig.json рдмрдирд╛рдПрдВ

{
    "compilerOptions": {
        "experimentalDecorators": true,
        // Target latest version of ECMAScript.
        "target": "esnext",
        // Search under node_modules for non-relative imports.
        "moduleResolution": "node",
        // Process & infer types from .js files.
        "allowJs": false,
        // Enable strictest settings like strictNullChecks & noImplicitAny.
        "strict": false,
        // Disallow features that require cross-file information for emit.
        "isolatedModules": true,
        // Import non-ES modules as default imports.
        "esModuleInterop": true,
        "jsx": "react"
    },
    "include": [
        "src"
    ],
    "exclude": [
        "node_modules",
    ]
}

рдмрд╕, рдЕрдм рдЖрдк рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдирд╛рдо рдмрджрд▓рдХрд░ .ts рдФрд░ .tsx рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЙрди рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╕рдХреНрд╖рдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред

рд╕рднреА 3 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдЕрд░реЗ, рдореБрдЭреЗ рдореМрдЬреВрджрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рдкреНрд░рдЧрддрд┐рд╢реАрд▓ рдкреНрд░рд╡рд╛рд╕ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП with-typescript рдЙрджрд╛рд╣рд░рдг рдХреЛ jsx рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдореЗрдВ рдХрдард┐рди рд╕рдордп рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рд╣реИред
рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдЗрд╕ рд▓рдХреНрд╖реНрдп рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рд╣реИ?

рдврд╝реВрдБрдв рдирд┐рдХрд╛рд▓рд╛!

npm i -D @babel/preset-typescript ts-loader typescript

@babel/typescript рдХреЛ .babelrc . рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ

"presets": [
    "razzle/babel",
    "@babel/typescript"
]

рдЗрд╕реЗ razzle.config.js . рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ

config.resolve.extensions = config.resolve.extensions.concat(['.ts', '.tsx']);
config.module.rules.push({ test: /\.tsx?$/, loader: 'ts-loader' });

рдПрдХ tsconfig.json рдмрдирд╛рдПрдВ

{
    "compilerOptions": {
        "experimentalDecorators": true,
        // Target latest version of ECMAScript.
        "target": "esnext",
        // Search under node_modules for non-relative imports.
        "moduleResolution": "node",
        // Process & infer types from .js files.
        "allowJs": false,
        // Enable strictest settings like strictNullChecks & noImplicitAny.
        "strict": false,
        // Disallow features that require cross-file information for emit.
        "isolatedModules": true,
        // Import non-ES modules as default imports.
        "esModuleInterop": true,
        "jsx": "react"
    },
    "include": [
        "src"
    ],
    "exclude": [
        "node_modules",
    ]
}

рдмрд╕, рдЕрдм рдЖрдк рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдирд╛рдо рдмрджрд▓рдХрд░ .ts рдФрд░ .tsx рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЙрди рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╕рдХреНрд╖рдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред

рдпрджрд┐ рдЖрдк рднрд╡рд┐рд╖реНрдп рд╕реЗ рдпрд╣рд╛рдВ рдЖ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдпрд╣рд╛рдВ рд╢рд╛рдирджрд╛рд░ рд░реИрдЬрд╝рд▓-рд╕рдорд░реНрдерд┐рдд рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд▓рдЧрдЗрди рдЪреЗрдХрдЖрдЙрдЯ рдХрд░реЗрдВ ред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

gabimor picture gabimor  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

howardya picture howardya  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

GouthamKD picture GouthamKD  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Jayphen picture Jayphen  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

alexjoyner picture alexjoyner  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ