Skip to content

Latest commit

ย 

History

History
276 lines (206 loc) ยท 6.15 KB

integrating-with-build-tools.md

File metadata and controls

276 lines (206 loc) ยท 6.15 KB

๋นŒ๋“œ ๋„๊ตฌ๋“ค

Babel

์„ค์น˜

npm install @babel/cli @babel/core @babel/preset-typescript --save-dev

.babelrc

{
  "presets": ["@babel/preset-typescript"]
}

์ปค๋งจ๋“œ ๋ผ์ธ ์ธํ„ฐํŽ˜์ด์Šค ์‚ฌ์šฉ

./node_modules/.bin/babel --out-file bundle.js src/index.ts

package.json

{
  "scripts": {
    "build": "babel --out-file bundle.js main.ts"
  },
}

์ปค๋งจ๋“œ ๋ผ์ธ ์ธํ„ฐํŽ˜์ด์Šค ์‚ฌ์šฉ

npm run build

Browserify

์„ค์น˜

npm install tsify

์ปค๋งจ๋“œ ๋ผ์ธ ์ธํ„ฐํŽ˜์ด์Šค ์‚ฌ์šฉ

browserify main.ts -p [ tsify --noImplicitAny ] > bundle.js

API ์‚ฌ์šฉ

var browserify = require("browserify");
var tsify = require("tsify");

browserify()
    .add("main.ts")
    .plugin("tsify", { noImplicitAny: true })
    .bundle()
    .pipe(process.stdout);

์ž์„ธํ•œ ๋‚ด์šฉ: smrq/tsify

Duo

์„ค์น˜

npm install duo-typescript

์ปค๋งจ๋“œ ๋ผ์ธ ์ธํ„ฐํŽ˜์ด์Šค ์‚ฌ์šฉ

duo --use duo-typescript entry.ts

API ์‚ฌ์šฉ

var Duo = require("duo");
var fs = require("fs")
var path = require("path")
var typescript = require("duo-typescript");

var out = path.join(__dirname, "output.js")

Duo(__dirname)
    .entry("entry.ts")
    .use(typescript())
    .run(function (err, results) {
        if (err) throw err;
        // ์ปดํŒŒ์ผ๋œ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅ ํŒŒ์ผ์— ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค
        fs.writeFileSync(out, results.code);
    });

์ž์„ธํ•œ ๋‚ด์šฉ: frankwallis/duo-typescript

Grunt

์„ค์น˜

npm install grunt-ts

๊ธฐ๋ณธ Gruntfile.js

module.exports = function(grunt) {
    grunt.initConfig({
        ts: {
            default : {
                src: ["**/*.ts", "!node_modules/**/*.ts"]
            }
        }
    });
    grunt.loadNpmTasks("grunt-ts");
    grunt.registerTask("default", ["ts"]);
};

์ž์„ธํ•œ ๋‚ด์šฉ: TypeStrong/grunt-ts

Gulp

์„ค์น˜

npm install gulp-typescript

๊ธฐ๋ณธ gulpfile.js

var gulp = require("gulp");
var ts = require("gulp-typescript");

gulp.task("default", function () {
    var tsResult = gulp.src("src/*.ts")
        .pipe(ts({
              noImplicitAny: true,
              out: "output.js"
        }));
    return tsResult.js.pipe(gulp.dest("built/local"));
});

์ž์„ธํ•œ ๋‚ด์šฉ: ivogabe/gulp-typescript

Jspm

์„ค์น˜

npm install -g jspm@beta

์ฃผ์˜์‚ฌํ•ญ: ํ˜„์žฌ jspm์˜ TypeScript ์ง€์›์€ 0.16beta ์ž…๋‹ˆ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ: TypeScriptSamples/jspm

Webpack

์„ค์น˜

npm install ts-loader --save-dev

Webpack 2 ์‚ฌ์šฉ ์‹œ ๊ธฐ๋ณธ webpack.config.js

module.exports = {
    entry: "./src/index.tsx",
    output: {
        path: '/',
        filename: "bundle.js"
    },
    resolve: {
        extensions: [".tsx", ".ts", ".js", ".json"]
    },
    module: {
        rules: [
            // '.ts' ๋˜๋Š” '.tsx' ํ™•์žฅ์ž๋ฅผ ๊ฐ€์ง„ ๋ชจ๋“  ํŒŒ์ผ์€ 'ts-loader'์— ์˜ํ•ด ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.
            { test: /\.tsx?$/, use: ["ts-loader"], exclude: /node_modules/ }
        ]
    }
}

Webpack 1 ์‚ฌ์šฉ ์‹œ ๊ธฐ๋ณธ webpack.config.js

module.exports = {
    entry: "./src/index.tsx",
    output: {
        filename: "bundle.js"
    },
    resolve: {
        // '.ts'์™€ '.tsx'๋ฅผ ํ•ด์„ ๊ฐ€๋Šฅํ•œ ํ™•์žฅ์ž๋กœ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
        extensions: ["", ".webpack.js", ".web.js", ".ts", ".tsx", ".js"]
    },
    module: {
        loaders: [
            // '.ts' ๋˜๋Š” '.tsx' ํ™•์žฅ์ž๋ฅผ ๊ฐ€์ง„ ๋ชจ๋“  ํŒŒ์ผ์€ 'ts-loader'์— ์˜ํ•ด ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.
            { test: /\.tsx?$/, loader: "ts-loader" }
        ]
    }
}

ts-loader์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์—ฌ๊ธฐ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

๋Œ€์•ˆ:

MSBuild

๋กœ์ปฌ์— ์„ค์น˜๋œ Microsoft.TypeScript.Default.props (๋งจ ์œ„)์™€ Microsoft.TypeScript.targets (๋งจ ์•„๋ž˜) ํŒŒ์ผ์„ ํฌํ•จํ•˜๋„๋ก ํ”„๋กœ์ ํŠธ ํŒŒ์ผ์„ ์—…๋ฐ์ดํŠธํ•˜์„ธ์š”:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <!-- ํ•˜๋‹จ์— default props ํฌํ•จ -->
  <Import
      Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TypeScript\Microsoft.TypeScript.Default.props"
      Condition="Exists('$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TypeScript\Microsoft.TypeScript.Default.props')" />

  <!-- TypeScript ํ™˜๊ฒฝ ์„ค์ • -->
  <PropertyGroup Condition="'$(Configuration)' == 'Debug'">
    <TypeScriptRemoveComments>false</TypeScriptRemoveComments>
    <TypeScriptSourceMap>true</TypeScriptSourceMap>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)' == 'Release'">
    <TypeScriptRemoveComments>true</TypeScriptRemoveComments>
    <TypeScriptSourceMap>false</TypeScriptSourceMap>
  </PropertyGroup>

  <!-- ํ•˜๋‹จ์— default targets ํฌํ•จ -->
  <Import
      Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TypeScript\Microsoft.TypeScript.targets"
      Condition="Exists('$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TypeScript\Microsoft.TypeScript.targets')" />
</Project>

MSBuild ์ปดํŒŒ์ผ๋Ÿฌ ์˜ต์…˜ ์ •์˜์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ: MSBuild ํ”„๋กœ์ ํŠธ์˜ ์ปดํŒŒ์ผ๋Ÿฌ ์˜ต์…˜ ์„ค์ •

NuGet

  • ์šฐ-ํด๋ฆญ -> Manage NuGet Packages
  • Microsoft.TypeScript.MSBuild๋ฅผ ๊ฒ€์ƒ‰ํ•˜์„ธ์š”
  • Install ํด๋ฆญ
  • ์„ค์น˜๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ๋‹ค์‹œ ๋นŒ๋“œ ํ•˜์„ธ์š”!

์ž์„ธํ•œ ๋‚ด์šฉ์€ ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ € ๋‹ค์ด์–ผ๋กœ๊ทธ์™€ NuGet๊ณผ nightly builds ์‚ฌ์šฉ์„ ์ฐธ๊ณ ํ•˜์„ธ์š”