Не могу использовать JSX после запуска npm - PullRequest
1 голос
/ 26 марта 2019

Я читал этот урок , и уже неделю я пытался решить эту проблему:

SyntaxError: TestComponent.js: Unexpected token (5:6)

  3 |   render() {
  4 |     return (
> 5 |       <div>
    |       ^
  6 |         { this.props.children }
  7 |       </div>
  8 |     )

В настоящее время у нас есть @babel/preset-env, @babel/preset-react, @babel/cliв 2019 году, а не в учебнике, указывающем на babel-preset-es2015 babel-preset-stage-0 babel-preset-react babel-cli.

Таким образом, использование их в package.json не решает проблему:

"babel": {
    "presets": [
      "@babel/env",
      "@babel/react"
    ]
  }

Я пробовал несколько способов, но ничего не останавливалосьОшибка.Я надеюсь, что кто-то решил проблему и может предоставить решение.

С благодарностью!

Ответы [ 2 ]

1 голос
/ 26 марта 2019

TLDR: Подробное пошаговое руководство руководство

Пара вещей изменилась, так как написание учебника, а именно следующие, являются критическими изменениями, если не указано иное, остальные шаги в учебнике одинаковы:

  1. Вам нужно будет загрузить и использовать babel-cli, чтобы заставить работать вашу собственную команду сценария "lib" :

    npm install --save-dev @babel/cli

  2. Вам также понадобится скачать и использовать плагин @babel/plugin-transform-react-jsx в вашей пользовательской команде сценария "lib" для компиляции и преобразования кода React , начиная с Вавилонская версия 6 и выше больше не имеет собственных трансформаций для React . Это необходимо, если вы хотите поделиться своим пользовательским компонентом только с собственным JavaScript на npmjs для других.

    npm install --save-dev @babel/plugin-transform-react-jsx

  3. Обновите команду сценария " lib ", чтобы использовать плагин JSX-преобразования babel, указанный на шаге 2:

    "scripts": { "start": "node scripts/start.js", "build": "node scripts/build.js", "lib": "babel --plugins @babel/transform-react-jsx src/node_modules --out-dir lib --copy-files", "test": "node scripts/test.js" },

Примечание : Вам также не нужен файл .babelrc, указанный в руководстве, так как мы отредактируем файл webpack.config.js для правильной передачи JSX позже.

Шаги 1 - 3 позволят вам публиковать и делиться своим компонентом с другими, но вам все равно придется вносить изменения в вашу локальную разработку, и я опишу эти шаги ниже:

  1. Для package.json вашего пользовательского компонента удалите расширение .js для точки входа "main", так как это вызовет следующую проблему . Например, вот мой пользовательский компонент package.json:

    { "private": true, "name": "YourComponent", "main": "./YourComponent" }

Теперь, если вы попытаетесь скомпилировать и запустить ваше приложение локально, используя ваш пользовательский компонент, оно выдаст ошибку с жалобой на синтаксис JSX вашего пользовательского компонента :

SyntaxError: YourComponent.js: неожиданный токен (6: 6)

  3 |   render() {
  4 |     return (
> 5 |       <div>
    |       ^
  6 |         { this.props.children }
  7 |       </div>
  8 |     )

Это потому, что вам нужно отредактировать файл webpack.config.js, чтобы использовать предустановки @babel/preset-env и @babel/preset-react babel. Итак, вы хотите добавить эту строку:

presets: ['@babel/preset-env', '@babel/preset-react'], вашему загрузчику для кода вашего приложения.

Для справки, вот соответствующий раздел моего кода (начинается со строки 329):

            ...
             // Process application JS with Babel.
            // The preset includes JSX, Flow, TypeScript, and some ESnext features.
            {
              test: /\.(js|mjs|jsx|ts|tsx)$/,
              include: paths.appSrc,
              loader: require.resolve('babel-loader'),
              options: {
                customize: require.resolve(
                  'babel-preset-react-app/webpack-overrides'
                ),
                presets: ['@babel/preset-env', '@babel/preset-react'],
                plugins: [
                  [
                    require.resolve('babel-plugin-named-asset-import'),
                    {
                      loaderMap: {
                        svg: {
                          ReactComponent: '@svgr/webpack?-svgo,+ref![path]',
                        },
                      },
                    },
                  ],
                ],
                // This is a feature of `babel-loader` for webpack (not Babel itself).
                // It enables caching results in ./node_modules/.cache/babel-loader/
                // directory for faster rebuilds.
                cacheDirectory: true,
                cacheCompression: isEnvProduction,
                compact: isEnvProduction,
              },
            },
           ...

Теперь, если вы работаете локально, оно должно работать: npm run start

Это были основные шаги, которые помогли исправить мою жалобу JSX на локальный запуск, а также на передачу моего пользовательского компонента другим на npmjs. Я создал публичное git-репо с моим кодом и подробным пошаговым руководством, чтобы помочь другим, его можно найти здесь .

Надеюсь, это поможет!

0 голосов
/ 26 марта 2019

Глядя на учебник и замечая, что он использует и "и" (разные стили кавычек, я не знаю правильного языка для правильной ссылки на них обоих).

Существует очень тонкая разница во взглядах между двумя, но только один из них будет интерпретирован правильно, другой вызовет ошибку. .Babelrc в руководстве использует неверный стиль кавычек.

Если вы скопировали и вставили из статьи, убедитесь, что вы используете правильный стиль кавычек, который должен быть наиболее близким к клавише Enter на клавиатуре.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...