Использование MobX наблюдаемых декораторов с create-react-app

на MobX docs скажите мне, что я должен "использовать transform plugin transform-decorators-legacy и убедиться, что он первый в списке плагинов", чтобы декораторы работали. Проект MobX boilerplate предполагает, что мне нужен .babelrc как:

{
  "presets": [
    "react",
    "es2015",
    "stage-1"
  ],
  "plugins": ["transform-decorators-legacy", "react-hot-loader/babel"]
}

как это сделать с помощью проекта create-react-app? Любая попытка использовать @ декораторы ошибки. Нет .babelrc даже после того, как проект 'выталкивается'.

5 ответов


вы не можете использовать синтаксис декоратора, если вы eject. Однако, вы можете использовать MobX без @ так как это просто синтаксический сахар.

Дэн Абрамов сформулировал причину такого

наша позиция проста: мы добавляем преобразования, которые либо стабильны достаточно (например, async / await) или сильно используется Facebook (например, class свойства.) Только это позволяет нам быть уверенными в их предложении, потому что если что-то изменится стандарт, мы напишем и выпустим в codemod отказаться от них.

поскольку мы в настоящее время не используем декораторов, мы не берем его на себя себя, чтобы обеспечить путь миграции, если стандарт становится несовместимый. Кроме того, декораторы даже официально не поддерживаются по Вавилону (- наследие есть не просто так). И когда они настроены немного неправильно люди виноваты.

вы также можете посмотреть create-react-app-mobx

обсуждений:


теперь есть альтернатива, которая не была доступна во время принятого ответа. Это пользовательские реагировать-скрипты. Это позволит вам включить декораторов, SASS и другие тонкости в вашем приложении CRA. И делает это без катапультирования.

хороший средне-статьи объясняя идеи, стоящие за ней.


вы можете использовать https://www.npmjs.com/package/react-app-rewire-mobx

React App Rewired даст вам доступ к конфигурации, чем вам просто нужно настроить пакет.

npm install react-app-rewired --save

// create a file named config-overrides.js

/* config-overrides.js */

const rewireMobX = require('react-app-rewire-mobx');

module.exports = function override(config, env) {
  config = rewireMobX(config, env);
  return config;
}

Примечание: Это спасает вас от катапультирования. CRA не поддерживает изменение конфигурации https://github.com/facebookincubator/create-react-app/issues/99#issuecomment-234657710 - ...


теперь, вы можете нажать require.resolve('babel-plugin-transform-decorators-legacy') в node_modules / babel-preset-react-app / index.JS plugins array


Это лучшее решение, которое я нашел без катапультирования. Заменить create-react-скрипты.

https://www.npmjs.com/package/custom-react-scripts

если у вас есть новый проект, начните с этого в вашем терминале:

create-react-app my-app --scripts-version custom-react-scripts

затем cd в каталог my-app и создайте.файл env. Отредактируйте .env файл к этому:

REACT_APP_BABEL_STAGE_0=true
REACT_APP_DECORATORS=true 

теперь ваше приложение будет поддерживать оформителей.

если у вас есть существующее приложение и хотите добавить этот. Добавить .env, как и выше:

npm i custom-react-scripts --save

удалить react-скрипты в вашем пакете.формат JSON. Не меняйте скрипты с react-скрипты начинают создавать-react-скрипты начинают. Оставьте сценарии как есть.

теперь добавьте свой материал mobx с декораторами и наслаждайтесь меньшим шаблонным кодом.

мой последний пакет.в JSON

{ "name": "mobx-test", "version": "0.1.0", "private": true, "dependencies": { "custom-react-scripts": "^0.2.1", "mobx": "^3.4.0", "mobx-react": "^4.3.5", "react": "^16.2.0", "react-dom": "^16.2.0" }, "scripts": { "start": "react-scripts start", "build": "react-scripts build", "test": "react-scripts test --env=jsdom", "eject": "react-scripts eject" } }

о, и если вы используете vscode, вы захотите скрыть предупреждения о неподдерживаемых декораторах. Для этого добавить tsconfig.файл json для вашего проекта с этим

{ "compilerOptions": { "experimentalDecorators": true, "allowJs": true } }