Meteor v1.8이 되면서 CLI에 react기반 애플리케이션 자동 생성 기능이 추가되었다. 여기에 Typescript와 Redux을 접목해서 개발환경을 꾸며 본다.
- React기반 Meteor 애플리케이션 생성
- SCSS 환경설정
- Typescript 환경설정
- 미티어의 Reactivity Computation인 withTracker 확인
- AntDesign CSS Framework 설정
- 소스코드
React 기반환경 만들기
meteor를 설치한다.
// Node Version Manager를 통해 Node LTS 버전을 설치한다. 최신 Meteor 1.8 은 Node v8.*을 사용한다.
$ nvm install 8.12.0
// meteor를 설치한다.
$ curl https://install.meteor.com | sh
// 향후 meteor v1.8.1 버전이 릴리즈 되면 성능향상을 위해 업그레이드를 반드시 수행한다.
$ meteor update --release 1.8.1
애플리케이션 생성
// 명령어: meteor create --react <AppName>
$ meteor create --react react-first
$ cd react-first
$ meteor run
SCSS 환경 전환
.css파일을 .scss파일로 전환한다. 이를 지원하기 위해 scss 패키지를 설치한다.
$ meteor add fourseven:scss
Typescript 관련 모듈 설치
meteor의 typescript 지원 패키지를 설치한다.
$ meteor add barbatus:typescript
@types와 필요 모듈을 설치한다.
$ meteor npm install --save-dev @types/meteor
$ meteor npm install --save-dev @types/node
$ meteor npm install --save-dev @types/react
$ meteor npm install --save-dev @types/react-dom
$ meteor npm install --save-dev typescript
$ meteor npm install --save-dev tslint
$ meteor npm install --save-dev tslint-react
Typescript 환경 전환
root에 tsconfig.json 파일 추가
{
"compilerOptions": {
"target": "es6",
"allowJs": true,
"jsx": "preserve",
"moduleResolution": "node",
"types": [
"node"
]
}
}
root에 tslint.json 파일 추가
// 과도한 lint가 귀찮아 extends는 주석처리함
{
// "extends": [
// "tslint:latest",
// "tslint-react"
// ],
"rules": {
"quotemark": [
true,
"single",
"jsx-double"
],
"ordered-imports": false,
"no-var-requires": false
}
}
root의 client와 imports, server 폴더안의 파일 명칭 .jsx / .js 를 .tsx / .ts 로 변경한다. tests 폴더는 .js 그대로 둔다.
마직막으로 package.json에서 mainModule의 client를 main.tsx로 수정한다.
.tsx 파일 내용을 typescript에 맞게 수정하기
1) import 문 수정
// client, imports 폴더안의 모든 .tsx 파일
// react import
import React from 'react'; ==> import * as React from 'react';
// 절대경로를 상대경로로 수정
import App from '/imports/ui/App'; ==> import App from '../imports/ui/App';
// .jsx 파일을 확장자 제거 App.tsx
import Hello from './Hello.jsx' ==> import Hello from './Hello';
import Info from './Info.jsx' ==> import Info from './Info';
2) class 문 수정
class Hello extends Components { ==> class Hello extends React.Component {
3) class에 Props 타입 설정
// info.tsx
interface InfoProps {
links: any;
}
class Info extends React.Component<InfoProps, any> {
...
}
4) export default 문 수정
withTracker는 Meteor의 Reactivity Computation 공간이다. Computation에는 Meteor의 Reactivity Resource가 위치한다. 즉, source가 변경되면 Computation영역이 재실행된다.
// imports/ui/info.tsx
export default InfoContainer = withTracker(...)
==>
export default withTracker(...);
// imports/api/links.ts
export default Links = new Mongo.Collection('links');
==>
const Links = new Mongo.Collection('links');
export default Links;
이제 다시 meteor run 을 실행한다.
Ant Design 설치하기
CSS Component를 제공하는 antd를 설치한다.
$ meteor npm install --save antd
$ meteor npm install --save-dev @types/antd
client/main.tsx 안에 antd css 를 import 한다.
import '../node_modules/antd/dist/antd.css';
또는, antd.less 파일을 직접 import할 수 있다.
$ meteor add less
$ meteor npm install --save indexof
// client/theme.less 파일 생성하고 antd.less 파일 import하기
@import '{}/node_modules/antd/dist/antd.less';
antd의 Menu를 App.tsx에 적용해 본다.
import * as React from 'react';
import Hello from './Hello';
import Info from './Info';
import { Menu, Icon } from 'antd';
const SubMenu = Menu.SubMenu;
const MenuItemGroup = Menu.ItemGroup;
class App extends React.Component {
state = {
current: 'mail',
};
handleClick = (e) => {
console.log('click ', e);
this.setState({
current: e.key,
});
}
render() {
return (
<div>
<Menu
onClick={this.handleClick}
selectedKeys={[this.state.current]}
mode="horizontal"
>
<Menu.Item key="mail">
<Icon type="mail" />Navigation One
</Menu.Item>
<Menu.Item key="app" disabled>
<Icon type="appstore" />Navigation Two
</Menu.Item>
<SubMenu title={<span className="submenu-title-wrapper"><Icon type="setting" />Navigation Three - Submenu</span>}>
<MenuItemGroup title="Item 1">
<Menu.Item key="setting:1">Option 1</Menu.Item>
<Menu.Item key="setting:2">Option 2</Menu.Item>
</MenuItemGroup>
<MenuItemGroup title="Item 2">
<Menu.Item key="setting:3">Option 3</Menu.Item>
<Menu.Item key="setting:4">Option 4</Menu.Item>
</MenuItemGroup>
</SubMenu>
<Menu.Item key="alipay">
<a href="https://ant.design" target="_blank" rel="noopener noreferrer">Navigation Four - Link</a>
</Menu.Item>
</Menu>
<Hello />
<Info />
</div>
);
}
}
export default App;
지금까지의 적용 소스코드, Redux 환경 설정하기는 다음 글에서..
<참조>
- meteor-react-typescript 코드 샘플
'Meteor > React + Meteor' 카테고리의 다른 글
[React + Meteor] 개발환경 설정 - 6 (0) | 2018.12.03 |
---|---|
[React + Meteor] 개발환경 설정 - 5 (0) | 2018.11.30 |
[React + Meteor] 개발환경 설정 - 4 (0) | 2018.11.28 |
[React + Meteor] 개발환경 설정 - 3 (0) | 2018.11.22 |
[React + Meteor] 개발환경 설정 - 2 (0) | 2018.11.16 |