2017-02-16 11 views
2

У меня есть приложение для универсального реагирования, где серверная часть встроена в babel, а клиентский пакет построен в webpack. Я прочитал preact-compact документы и предлагает добавлять это в .babelrc для строительства с использованием babel:Миграция в preactjs

{ 
    "plugins": [ 
    [ 
     "transform-react-jsx", 
     { 
     "pragma": "h" 
     } 
    ], 
    [ 
     "module-resolver", 
     { 
     "root": [ 
      "." 
     ], 
     "alias": { 
      "react": "preact-compat", 
      "react-dom": "preact-compat" 
     } 
     } 
    ] 
    ], 
    "presets": [ 
    "react" 
    ] 
} 

И webpack:

{ 
    "resolve": { 
    "alias": { 
     "react": "preact-compat", 
     "react-dom": "preact-compat" 
    } 
    } 
} 

Но после строительства я получаю ошибку

Как перейти на preact для универсального приложения для реагирования

ответ

4

Но после строительства я получаю сообщение об ошибке «ч не определена»

Вы добавили transform-react-jsx плагин для вашей Вавилонской конфигурации.

["transform-react-jsx", { "pragma":"h" }] 

Это говорит babel, как перевести код JSX. Для того, чтобы работать, функция h должна быть в области видимости, это означает, что вам нужно импортировать ее во все файлы, которые вы используете JSX.

import { h } from 'preact'; 

Вместо того, чтобы изменить весь код, который использует React, вы можете использовать preact-compat и псевдоним как react и react-dom к preact-compat, как вы сделали правильно, либо с babel-plugin-module-resolver или WebPack. С этим вы можете использовать в своем коде react и react-dom, а preact-compat сделает все для вас.

Для того, чтобы это сработало, вы должны удалить ["transform-react-jsx", { "pragma":"h" }] из своей конфигурации babel.

+0

Добавление псевдонима в конфигурацию webpack только разрешает проблемы с пакетом. Но поскольку его универсальное приложение имеет код рендеринга на стороне сервера, который входит в комплект с помощью babel, как подойти к этой проблеме – guru107

+1

Теперь я понимаю, почему вы добавили плагин 'module-resolver' для babel. Вы сделали это правильно, вам просто нужно удалить '[" transform-react-jsx ", {" pragma ":" h "}]' и 'preact-compat' будет делать то же самое, что и с webpack. –

+0

Yup, @MichaelJungo является правильным. «Прагма»: «h» предназначена для тех, кто использует preact напрямую, а не через preact-compat. –

 Смежные вопросы

  • Нет связанных вопросов^_^