1
1
이 퀵 스타트 가이드는 [ gulp] ( http://gulpjs.com ) 로 TypeScript를 빌드한 다음 [ Browserify] ( http://browserify.org ) , [ uglify] ( http://lisperator.net/uglifyjs ) 또는 [ Watchify] ( https://github.com/substack/watchify ) 를 gulp 파이프 라인에 추가하는 방법을 알려줍니다.
2
+ 또한 [ Babelify] ( https://github.com/babel/babelify ) 를 사용하여 [ Babel] ( https://babeljs.io ) 기능을 추가하는 방법을 알려줍니다.
2
3
3
- 또한 [ Babelify] ( https://github.com/babel/babelify ) 를 사용하여 [ Babel] ( https://babeljs.io ) 기능에 대한 기능을 추가합니다.
4
- [ npm] ( https://www.npmjs.com ) 과 함께 [ Node.js] ( https://nodejs.org ) 는 이미 사용하고 있다고 가정합니다.
4
+ [ npm] ( https://www.npmjs.com ) 과 [ Node.js] ( https://nodejs.org ) 는 이미 사용하고 있다고 가정합니다.
5
5
6
6
# 작은 프로젝트 (Minimal project)
7
7
8
- 새로운 디렉토리부터 시작합시다.
8
+ 새로운 디렉터리로 시작합시다.
9
9
당장은 ` proj ` 라고 이름을 붙이겠지만 원하는 대로 변경할 수 있습니다.
10
10
11
11
``` shell
12
12
mkdir proj
13
13
cd proj
14
14
```
15
15
16
- 시작하려면 다음과 같은 방식으로 프로젝트를 구조화해야 합니다:
16
+ 시작하기 위해, 다음과 같이 프로젝트를 구조화해야 합니다:
17
17
18
18
``` text
19
19
proj/
@@ -39,20 +39,21 @@ npm init
39
39
```
40
40
41
41
일련의 알림을 받게 될 것입니다.
42
- entry point를 제외하고는 기본값을 사용할 수 있으며 ` ./dist/main.js ` 를 사용합니다.
42
+ entry point를 제외하고는 기본값을 사용할 수 있습니다.
43
+ entry point로 ` ./dist/main.js ` 를 사용합니다.
43
44
` package.json ` 파일로 돌아가서 언제든 변경할 수 있습니다.
44
45
45
46
## 의존성 설치 (Install our dependencies)
46
47
47
48
이제는 ` npm install ` 을 사용하여 패키지를 설치할 수 있습니다.
48
- 먼저 ` gulp-cli ` 를 글로벌 설치하십시오 (Unix 시스템을 사용하는 경우 ` npm install ` 명령 앞에 ` sudo ` 를 붙여야 할 수도 있습니다).
49
+ 먼저 ` gulp-cli ` 를 전역으로 설치하십시오 (Unix 시스템을 사용하는 경우 ` npm install ` 명령 앞에 ` sudo ` 를 붙여야 할 수도 있습니다).
49
50
50
51
``` shell
51
52
npm install -g gulp-cli
52
53
```
53
54
54
- 그런 다음 프로젝트의 개발자 의존성에 ` typescript ` , ` gulp ` 및 ` gulp-typescript ` 를 설치하십시오.
55
- [ Gulp-typescript] ( https://www.npmjs.com/package/gulp-typescript ) 는 Typescript의 gulp 플러그인입니다.
55
+ 그런 다음 프로젝트의 개발 의존성에 ` typescript ` , ` gulp ` 및 ` gulp-typescript ` 를 설치하십시오.
56
+ [ Gulp-typescript] ( https://www.npmjs.com/package/gulp-typescript ) 는 TypeScript의 gulp 플러그인입니다.
56
57
57
58
``` shell
58
59
npm install --save-dev typescript gulp gulp-typescript
@@ -61,7 +62,6 @@ npm install --save-dev typescript gulp gulp-typescript
61
62
## 간단한 예제 작성 (Write a simple example)
62
63
63
64
Hello World 프로그램을 작성해 보겠습니다.
64
-
65
65
` src ` 에 ` main.ts ` 파일을 만듭니다 :
66
66
67
67
``` ts
@@ -71,7 +71,7 @@ function hello(compiler: string) {
71
71
hello (" TypeScript" );
72
72
```
73
73
74
- ` proj ` 이라는 프로젝트 루트에 ` tsconfig.json ` 파일을 생성합니다 :
74
+ ` proj ` 이라는 프로젝트 루트에 ` tsconfig.json ` 파일을 생성합니다:
75
75
76
76
``` json
77
77
{
@@ -87,7 +87,7 @@ hello("TypeScript");
87
87
88
88
## ` gulpfile.js ` 생성 (Create a ` gulpfile.js ` )
89
89
90
- 프로젝트 루트에 ` gulpfile.js ` 파일을 만듭니다 :
90
+ 프로젝트 루트에 ` gulpfile.js ` 파일을 만듭니다:
91
91
92
92
``` js
93
93
var gulp = require (" gulp" );
@@ -101,14 +101,14 @@ gulp.task("default", function () {
101
101
});
102
102
```
103
103
104
- ## resulting 앱 테스트 (Test the resulting app)
104
+ ## 결과 앱 테스트 (Test the resulting app)
105
105
106
106
``` shell
107
107
gulp
108
108
node dist/main.js
109
109
```
110
110
111
- 프로그램에서 "Hello from TypeScript!"를 인쇄해야합니다 .
111
+ 프로그램은 "Hello from TypeScript!"를 출력해야 합니다 .
112
112
113
113
# 코드에 모듈 추가 (Add modules to the code)
114
114
@@ -123,15 +123,15 @@ export function sayHello(name: string) {
123
123
}
124
124
```
125
125
126
- 이제 ` src/main.ts ` 의 ` sayHello ` 를 ` greet.ts ` 에서 가져오도록 변경합니다 :
126
+ 이제 ` src/main.ts ` 의 ` sayHello ` 를 ` greet.ts ` 에서 import 하도록 변경합니다 :
127
127
128
128
``` ts
129
129
import { sayHello } from " ./greet" ;
130
130
131
131
console .log (sayHello (" TypeScript" ));
132
132
```
133
133
134
- 마지막으로 ` src/greet.ts ` 를 ` tsconfig.json ` 에 추가하십시오 :
134
+ 마지막으로 ` src/greet.ts ` 를 ` tsconfig.json ` 에 추가하십시오:
135
135
136
136
``` json
137
137
{
@@ -146,7 +146,7 @@ console.log(sayHello("TypeScript"));
146
146
}
147
147
```
148
148
149
- ` gulp ` 을 실행하고 노드에서 테스트하여 모듈이 작동하는지 확인하십시오 :
149
+ ` gulp ` 을 실행하고 Node에서 테스트하여 모듈이 작동하는지 확인하십시오:
150
150
151
151
``` shell
152
152
gulp
@@ -158,14 +158,14 @@ ES2015 모듈 구문을 사용했지만 TypeScript는 Node가 사용하는 Commo
158
158
159
159
# Browserify
160
160
161
- 이제 이 프로젝트를 노드에서 브라우저로 이동하겠습니다.
161
+ 이제 이 프로젝트를 Node에서 브라우저로 이동하겠습니다.
162
162
이를 위해 모든 모듈을 하나의 JavaScript 파일로 번들링 하고자 합니다.
163
163
다행히도 정확히 Browserify가 하는 일입니다.
164
164
더 좋은 것은 노드에서 사용하는 CommonJS 모듈 시스템을 TypeScript에서 사용할 수 있다는 것입니다.
165
165
즉 TypeScript와 Node 설정이 기본적으로 변경되지 않은 브라우저로 전송되는 것을 의미합니다.
166
166
167
167
먼저 browserify, [ tsify] ( https://www.npmjs.com/package/tsify ) 및 vinyl-source-stream을 설치하십시오.
168
- tsify는 gulp-typescript처럼 Typeify 컴파일러에 접근할 수 있는 Browserify 플러그인입니다.
168
+ tsify는 gulp-typescript처럼 TypeScript 컴파일러에 접근할 수 있는 Browserify 플러그인입니다.
169
169
vinyl-source-stream을 사용하면 Browserify의 파일 출력을 gulp에서 [ vinyl] ( https://github.com/gulpjs/vinyl ) 으로 인식하는 형식으로 다시 변환할 수 있습니다.
170
170
171
171
``` shell
@@ -190,7 +190,7 @@ npm install --save-dev browserify tsify vinyl-source-stream
190
190
</html >
191
191
```
192
192
193
- 이제 ` main.ts ` 를 변경하여 페이지를 업데이트하십시오 :
193
+ 이제 페이지를 업데이트하기 위해 ` main.ts ` 를 변경합니다 :
194
194
195
195
``` ts
196
196
import { sayHello } from " ./greet" ;
@@ -207,20 +207,20 @@ showHello("greeting", "TypeScript");
207
207
이제 gulpfile을 다음과 같이 변경하십시오 :
208
208
209
209
``` js
210
- var gulp = require (" gulp" );
211
- var browserify = require (" browserify" );
210
+ var gulp = require (' gulp' );
211
+ var browserify = require (' browserify' );
212
212
var source = require (' vinyl-source-stream' );
213
- var tsify = require (" tsify" );
213
+ var tsify = require (' tsify' );
214
214
var paths = {
215
215
pages: [' src/*.html' ]
216
216
};
217
217
218
- gulp .task (" copy-html" , function () {
218
+ gulp .task (' copy-html' , function () {
219
219
return gulp .src (paths .pages )
220
- .pipe (gulp .dest (" dist" ));
220
+ .pipe (gulp .dest (' dist' ));
221
221
});
222
222
223
- gulp .task (" default" , [ " copy-html" ] , function () {
223
+ gulp .task (' default' , gulp . series ( gulp . parallel ( ' copy-html' ) , function () {
224
224
return browserify ({
225
225
basedir: ' .' ,
226
226
debug: true ,
@@ -231,8 +231,8 @@ gulp.task("default", ["copy-html"], function () {
231
231
.plugin (tsify)
232
232
.bundle ()
233
233
.pipe (source (' bundle.js' ))
234
- .pipe (gulp .dest (" dist" ));
235
- });
234
+ .pipe (gulp .dest (' dist' ));
235
+ })) ;
236
236
```
237
237
238
238
` copy-html ` 태스크를 추가하고 ` default ` 의 의존성으로 추가합니다.
@@ -242,14 +242,14 @@ gulp.task("default", ["copy-html"], function () {
242
242
243
243
` bundle ` 을 호출한 후 ` source ` (vinil-source-stream에 대한 별칭)를 사용하여 출력 번들 ` bundle.js ` 의 이름을 지정합니다.
244
244
245
- gulp를 실행하고 브라우저에서 ` dist/index.html ` 을 열어 페이지를 테스트하십시오 .
245
+ gulp를 실행하고 브라우저에서 ` dist/index.html ` 을 열어 페이지를 확인하세요 .
246
246
페이지에 "Hello from TypeScript"가 표시되어야 합니다.
247
247
248
248
Browserify에 ` debug : true ` 를 지정한 것에 주목하십시오.
249
- 이로 인해 tsify는 번들 JavaScript 파일 내에서 소스맵을 내보냅니다.
249
+ 이로 인해 tsify는 번들된 JavaScript 파일 안에 소스 맵을 내보냅니다.
250
250
소스 맵을 사용하면 번들로 제공된 JavaScript 대신 브라우저에서 원본 TypeScript 코드를 디버깅할 수 있습니다.
251
- 브라우저의 디버거를 열고 ` main.ts ` 안에 브레이크포인트을 넣으면 소스 맵이 작동하는지 테스트할 수 있습니다.
252
- 페이지를 새로 고침 할 때 브레이크포인트가 페이지를 일시 중지하고 ` greet.ts ` 를 디버깅 할 수 있도록 해야 합니다.
251
+ 브라우저의 디버거를 열고 ` main.ts ` 안에 브레이크 포인트을 넣으면 소스 맵이 작동하는지 테스트할 수 있습니다.
252
+ 페이지를 새로 고침 하면 브레이크 포인트가 페이지를 일시 중지하고 ` greet.ts ` 를 디버깅 할 수 있어야 합니다.
253
253
254
254
# Watchify, Babel, and Uglify
255
255
@@ -268,18 +268,18 @@ Browserify에 `debug : true`를 지정한 것에 주목하십시오.
268
268
Watchify로 백그라운드 컴파일을 시작하겠습니다 :
269
269
270
270
``` shell
271
- npm install --save-dev watchify gulp-util
271
+ npm install --save-dev watchify fancy-log
272
272
```
273
273
274
274
이제 gulpfile을 다음과 같이 변경하십시오 :
275
275
276
276
``` js
277
- var gulp = require (" gulp" );
278
- var browserify = require (" browserify" );
277
+ var gulp = require (' gulp' );
278
+ var browserify = require (' browserify' );
279
279
var source = require (' vinyl-source-stream' );
280
- var watchify = require (" watchify" );
281
- var tsify = require (" tsify" );
282
- var gutil = require (" gulp-util " );
280
+ var watchify = require (' watchify' );
281
+ var tsify = require (' tsify' );
282
+ var fancy_log = require (' fancy-log ' );
283
283
var paths = {
284
284
pages: [' src/*.html' ]
285
285
};
@@ -292,37 +292,37 @@ var watchedBrowserify = watchify(browserify({
292
292
packageCache: {}
293
293
}).plugin (tsify));
294
294
295
- gulp .task (" copy-html" , function () {
295
+ gulp .task (' copy-html' , function () {
296
296
return gulp .src (paths .pages )
297
- .pipe (gulp .dest (" dist" ));
297
+ .pipe (gulp .dest (' dist' ));
298
298
});
299
299
300
300
function bundle () {
301
301
return watchedBrowserify
302
302
.bundle ()
303
+ .on (' error' , fancy_log)
303
304
.pipe (source (' bundle.js' ))
304
- .pipe (gulp .dest (" dist" ));
305
+ .pipe (gulp .dest (' dist' ));
305
306
}
306
307
307
- gulp .task (" default" , [ " copy-html" ] , bundle);
308
- watchedBrowserify .on (" update" , bundle);
309
- watchedBrowserify .on (" log" , gutil . log );
308
+ gulp .task (' default' , gulp . series ( gulp . parallel ( ' copy-html' ) , bundle) );
309
+ watchedBrowserify .on (' update' , bundle);
310
+ watchedBrowserify .on (' log' , fancy_log );
310
311
```
311
312
312
313
여기에는 기본적으로 세 가지 변경 사항이 있지만 코드를 약간 리팩토링해야합니다.
313
314
314
315
1 . ` watchify ` 에 대한 호출에서 ` browserify ` 인스턴스를 감싸고 그 결과를 유지했습니다.
315
- 2 . ` watchedBrowserify.on(" update" , bundle); ` 을 호출하여 Browserify 가 TypeScript 파일 중 하나가 변경될 때마다 ` bundle ` 함수를 실행하도록 했습니다.
316
- 3 . ` watchedBrowserify.on(" log", gutil.log ); ` 을 호출하여 콘솔에 로그했습니다 .
316
+ 2 . ` watchedBrowserify.on(' update' , bundle); ` 을 호출하여 Browserify 가 TypeScript 파일 중 하나가 변경될 때마다 ` bundle ` 함수를 실행하도록 했습니다.
317
+ 3 . ` watchedBrowserify.on(' log', fancy_log ); ` 을 호출하여 콘솔에 기록했습니다 .
317
318
318
319
(1)과 (2)는 ` default ` 작업에서 ` browserify ` 를 호출해야 한다는 것을 의미합니다.
319
320
Watchify와 Gulp 모두 호출해야 하기 때문에 ` default ` 함수에 이름을 주어야 합니다.
320
321
(3)을 사용한 로깅을 추가하는 것은 선택 사항이지만 설정을 디버깅하는 데 매우 유용합니다.
321
322
322
323
이제 Gulp를 실행하면 시작해야 하고 계속 실행됩니다.
323
324
` main.ts ` 에서 ` showHello ` 에 대한 코드를 변경하고 저장하십시오.
324
-
325
- 다음과 같은 출력이 표시되어야 합니다 :
325
+ 다음과 같은 출력이 표시되어야 합니다:
326
326
327
327
``` shell
328
328
proj$ gulp
@@ -348,23 +348,23 @@ npm install --save-dev gulp-uglify vinyl-buffer gulp-sourcemaps
348
348
이제 gulpfile을 다음과 같이 변경하십시오 :
349
349
350
350
``` js
351
- var gulp = require (" gulp" );
352
- var browserify = require (" browserify" );
351
+ var gulp = require (' gulp' );
352
+ var browserify = require (' browserify' );
353
353
var source = require (' vinyl-source-stream' );
354
- var tsify = require (" tsify" );
354
+ var tsify = require (' tsify' );
355
355
var uglify = require (' gulp-uglify' );
356
356
var sourcemaps = require (' gulp-sourcemaps' );
357
357
var buffer = require (' vinyl-buffer' );
358
358
var paths = {
359
359
pages: [' src/*.html' ]
360
360
};
361
361
362
- gulp .task (" copy-html" , function () {
362
+ gulp .task (' copy-html' , function () {
363
363
return gulp .src (paths .pages )
364
- .pipe (gulp .dest (" dist" ));
364
+ .pipe (gulp .dest (' dist' ));
365
365
});
366
366
367
- gulp .task (" default" , [ " copy-html" ] , function () {
367
+ gulp .task (' default' , gulp . series ( gulp . parallel ( ' copy-html' ) , function () {
368
368
return browserify ({
369
369
basedir: ' .' ,
370
370
debug: true ,
@@ -379,8 +379,8 @@ gulp.task("default", ["copy-html"], function () {
379
379
.pipe (sourcemaps .init ({loadMaps: true }))
380
380
.pipe (uglify ())
381
381
.pipe (sourcemaps .write (' ./' ))
382
- .pipe (gulp .dest (" dist" ));
383
- });
382
+ .pipe (gulp .dest (' dist' ));
383
+ })) ;
384
384
```
385
385
386
386
` uglify ` 자체에는 하나의 호출만 있습니다 &mdash ; ` buffer ` 와 ` sourcemaps ` 에 대한 호출은 sourcemaps이 계속 작동하는지 확인하기 위해 존재합니다.
@@ -399,7 +399,7 @@ Uglify처럼 Babelify도 코드를 엉망으로 만들기 때문에 vinyl-buffer
399
399
기본적으로 Babelify는 확장자가 ` .js ` , ` .es ` , ` .es6 ` 및 ` .jsx ` 인 파일만 처리하므로 Babelify에 옵션으로 ` .ts ` 확장자를 추가해야 합니다.
400
400
401
401
``` shell
402
- npm install --save-dev babelify babel-core babel-preset-es2015 vinyl-buffer gulp-sourcemaps
402
+ npm install --save-dev babelify@8 babel-core babel-preset-es2015 vinyl-buffer gulp-sourcemaps
403
403
```
404
404
405
405
이제 gulpfile을 다음과 같이 변경하십시오 :
@@ -415,12 +415,12 @@ var paths = {
415
415
pages: [' src/*.html' ]
416
416
};
417
417
418
- gulp .task (' copyHtml ' , function () {
418
+ gulp .task (' copy-html ' , function () {
419
419
return gulp .src (paths .pages )
420
420
.pipe (gulp .dest (' dist' ));
421
421
});
422
422
423
- gulp .task (' default' , [ ' copyHtml ' ] , function () {
423
+ gulp .task (' default' , gulp . series ( gulp . parallel ( ' copy-html ' ) , function () {
424
424
return browserify ({
425
425
basedir: ' .' ,
426
426
debug: true ,
@@ -439,13 +439,12 @@ gulp.task('default', ['copyHtml'], function () {
439
439
.pipe (sourcemaps .init ({loadMaps: true }))
440
440
.pipe (sourcemaps .write (' ./' ))
441
441
.pipe (gulp .dest (' dist' ));
442
- });
442
+ })) ;
443
443
```
444
444
445
445
TypeScript 대상 ES2015도 필요합니다.
446
446
Babel은 TypeScript에서 내보내는 ES2015 코드에서 ES5를 생성합니다.
447
-
448
- ` tsconfig.json ` 을 수정합시다 :
447
+ ` tsconfig.json ` 을 수정합시다:
449
448
450
449
``` json
451
450
{
@@ -459,4 +458,4 @@ Babel은 TypeScript에서 내보내는 ES2015 코드에서 ES5를 생성합니
459
458
}
460
459
```
461
460
462
- Babel의 ES5 출력은 간단한 스크립트에 대한 TypeScript의 출력과 매우 유사해야 합니다.
461
+ 간단한 스크립트의 경우 Babel의 ES5 결과물은 TypeScript의 결과물과 거의 같아야 합니다.
0 commit comments