하지만 개발하면서 불편한 점이 한두가지가 아니더군요. gulp typescript, gulp copy 명령어의 연속... 그리고 브라우저 새로고침 반복들... 이후, webpack 의 존재를 알게되었지만 이상하게 관련 설정을 하기 싫더군요.(게으름이...) 그러다 우연히 Fuse-box 란 놈을 발견하게 되었습니다. 자석에 이끌리듯 설정하게 되었네요.
1. 설치
npm 을 사용하여 fuse-box 를 설치합니다.
npm install fuse-box --save-dev
2. 환경설정(디버그)
라라벨 설치경로 루트에서 fuse.js 파일을 생성합니다.
const fb = require('fuse-box');
const fuseBox = fb.FuseBox.init({
homeDir: 'resources/assets/typescript/',
sourceMap: {
bundleReference: 'app.js.map',
outFile: 'public/js/app.js.map',
},
outFile: 'public/js/app.js',
plugins: [
[
fb.LESSPlugin(),
fb.CSSPlugin()
],
fb.TypeScriptHelpers(),
]
});
fuseBox.devServer('> main.ts', {
port: 44444,
httpServer: false
});
라라벨을 사용하기 위하여 기존 웹서버를 이용하게됩니다. 따라서 자체 웹서버를 끕니다.(httpServer: false)
node fuse.js
상기와같이 fuse.js 를 실행하면 소스를 변경&저장할 때마다 새로 빌드하여 실시간으로 브라우저에 반영합니다.
3. 환경설정(배포)
const fb = require('fuse-box');
const fuseBox = fb.FuseBox.init({
homeDir: 'resources/assets/typescript/',
sourceMap: {
bundleReference: 'app.js.map',
outFile: 'public/js/app.js.map',
},
outFile: 'public/js/app.js',
plugins: [
[
fb.LESSPlugin(),
fb.CSSPlugin(),
],
fb.TypeScriptHelpers(),
fb.UglifyJSPlugin()
]
});
fuseBox.bundle('> main.ts');
이때, Angular2 에서도 enableProdMode() 를 추가하여야합니다.
import {platformBrowserDynamic} from '@angular/platform-browser-dynamic';
import {AppModule} from './app.module';
import {enableProdMode} from '@angular/core';
const platform = platformBrowserDynamic();
enableProdMode();
platform.bootstrapModule(AppModule);
4. 기존 gulpfile.js 설정에서 변경사항
mix.typescript 부분을 모두 삭제합니다.
mix.copy 부분도 아래의 두 개를 제외하고 모두 삭제합니다.
mix.copy('./node_modules/core-js', 'public/js/core-js');
mix.copy('./node_modules/zone.js/dist', 'public/js/zone.js/dist');
엄청 간단하고 깔끔해졌네요. 신규 파일이 있을때마다 gulpfile.js 에 추가하여야했는데 그런 부분이 해소가 되었습니다.
5. script 호출 수정
<script src="/js/core-js/client/shim.min.js"></script>
<script src="/js/zone.js/dist/zone.min.js"></script>
{{--<script src="/js/systemjs/dist/system.src.js"></script>--}}
{{--<script src="/js/systemjs.config.js"></script>--}}
{{--<script>--}}
{{--System.import('app').catch(function(err){ console.error(err); });--}}
{{--</script>--}}
shim 과 zone 을 제외하고 모두 삭제합니다. 아울러 systemjs.config.js 파일도 필요없게 되었습니다.
6. 기타
Fuse-box 를 통한 실시간 변경 반영을 위해서... 기존 Angular2 콤포넌트의 templateUrl 을 사용하여 html 부분을 분리한것을 모두 template 으로 옮겼습니다. 끝으로 크롬에 Angury 를 설치(https://augury.angular.io/)하면 훨씬 더 용이하게 Angular2 디버깅이 가능합니다.
'프로그래밍 > Web' 카테고리의 다른 글
PHP 7 에서의 예외처리 - Throwable, Exception, Error (0) | 2017.04.21 |
---|---|
Angular4 업그레이드하기 (0) | 2017.03.28 |
PhpStorm 의 .idea 디렉토리 git ignore 처리하기 (0) | 2016.12.26 |
Angular2 설치하기 - Laravel 5 (0) | 2016.11.09 |
PhpStorm 원격 디버깅 - xdebug (0) | 2016.11.04 |
댓글