TypeScript "응용 프로그램"을 하나의 JavaScript 파일로 묶어려고합니다.Typescript 컴파일러 - 외부 라이브러리 번들
저는 TSC (TypeScript 2.2 사용) 이외의 어떤 번들러를 사용하지 않습니다. 내 자신의 TS 파일을 제외하고, 내 응용 프로그램은 또한 immutablejs 같은 외부 모듈을 사용합니다.
가능한 모든 스레드를 읽었지만 TSC 만 사용하여 컴파일 된/transpiled javascript 파일에 외부 모듈 (node_modules에서)을 묶는 방법을 찾을 수 없습니다.
아래에서 내 최신 코드/configu 샘플과 내 시도 결과를 찾을 수 있습니다.
tsconfig.json
{
"compilerOptions": {
"target": "es5",
"module": "system",
"removeComments": true,
"sourceMap": true,
"allowJs": true
}
}
app.ts - 참고 : ./something.ts가 성공적으로 번들로 제공됩니다.
/// <reference path="../node_modules/immutable/dist/immutable.d.ts" />
import * as something from "./something";
import * as Immutable from "immutable";
console.log(something.test);
const map1 = Immutable.Map({ a: 1, b: '2', c: 'cu' });
console.log(map1.get('a'))
1 # : TSC-번들 (https://www.npmjs.com/package/typescript-bundle)
만 immutableJs뿐만 아니라, 발생 오류를 번들하지 않습니다하지이 방법을 사용하여 : 이 필요가를 정의되어 있지 않습니다.
var dragonfly = (function() {
var main = null;
var modules = {
"require": {
factory: undefined,
dependencies: [],
exports: function (args, callback) { return require(args, callback); },
resolved: true
}
};
function define(id, dependencies, factory) {
return main = modules[id] = {
dependencies: dependencies,
factory: factory,
exports: {},
resolved: false
};
}
function resolve(definition) {
if (definition.resolved === true)
return;
definition.resolved = true;
var dependencies = definition.dependencies.map(function (id) {
return (id === "exports")
? definition.exports
: (function() {
if(modules[id] !== undefined) {
resolve(modules[id]);
return modules[id].exports;
} else return require(id)
})();
});
definition.factory.apply(null, dependencies);
}
function collect() {
Object.keys(modules).map(function (key) { return modules[key]; }).forEach(resolve);
return (main !== null)
? main.exports
: undefined
}
define("something", ["require", "exports"], function (require, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.test = "oie";
});
define("app", ["require", "exports", "something", "immutable"], function (require, exports, something, Immutable) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
console.log(something.test);
var map1 = Immutable.Map({ a: 1, b: '2', c: 'cu' });
console.log(map1.get('a'));
});
//# sourceMappingURL=app.js.map
return collect();
})();
# 2 - 모듈 TSC를 사용하여 = 시스템이 방법은 또한 immutableJs 번들하지 않는
(TSC의 SRC /가/app.js를 구축 --outfile -m 시스템을 app.ts)하지만, 또한 오류 발생 : 시스템
System.register("something", [], function (exports_1, context_1) {
"use strict";
var __moduleName = context_1 && context_1.id;
var test;
return {
setters: [],
execute: function() {
exports_1("test", test = "oie");
}
};
});
/// <reference path="../node_modules/immutable/dist/immutable.d.ts" />
System.register("app", ["something", "immutable"], function (exports_2, context_2) {
"use strict";
var __moduleName = context_2 && context_2.id;
var something, Immutable, map1;
return {
setters: [
function (something_1) {
something = something_1;
},
function (Immutable_1) {
Immutable = Immutable_1;
}
],
execute: function() {/// <reference path="../node_modules/immutable/dist/immutable.d.ts" />
console.log(something.test);
map1 = Immutable.Map({ a: 1, b: '2', c: 'cu' });
console.log(map1.get('a'));
}
};
});
# 3
을 정의되지 않은 - 모듈 TSC를 사용하여 = AMD 0 (TSC SRC/app.ts -m AMD --outfile/app.js 구축)이 메소드는 immutableJs를 번들하지 않을뿐만 아니라 오류를 발생시키지 않습니다. define이 정의되지 않았습니다.
define("something", ["require", "exports"], function (require, exports) {
"use strict";
exports.__esModule = true;
exports.test = "oie";
});
/// <reference path="../node_modules/immutable/dist/immutable.d.ts" />
define("app", ["require", "exports", "something", "immutable"], function (require, exports, something, Immutable) {
"use strict";
exports.__esModule = true;
console.log(something.test);
var map1 = Immutable.Map({ a: 1, b: '2', c: 'cu' });
console.log(map1.get('a'));
});
결론 : 그것은 내 프로젝트의 미래 등등 웹팩, browserify, 꿀꺽, 이러한 인기 bundlers의 필요없이 외부 라이브러리를 번들 할 수 정말 중요 ...
합니까 누구든지 나를 도울 수 있니?
미리 감사드립니다.
TF!
그냥 궁금해서 찾아 낸다 - 당신이 웹팩을 거부하고 browserify하지만 (상대적으로 알려지지 않은 [타이프 라이터 - 번들]를 사용하고자하는 이유가 https://github.com/sinclairzx81/typescript- 묶음)? 앞서 보았 듯이 typescript는 번들러가 아니며 출력물에 외부 종속성을 포함시키지 않습니다. 단, 코드가 모두 함께 컴파일되지 않은 경우는 예외입니다. – artem
안녕 Artem, 대답 주셔서 감사합니다 ... 내가 거부하는 이유는 단 하나입니다. 내가 만든 webserver/watcher/task 러너를 사용해야한다. 당신은 여전히 좋은 아이디어가 될 것이라고 생각 하는가?/bundler로서 만이 사람들 (webpack, gulp, bower)을 사용할 수 있을까? –
번들러 만 필요하면 [ts-loader] (https://github.com/TypeStrong/ts-loader)를 사용하여 웹팩을하는 것이 가장 확실한 선택입니다. 그 외에는 다른 것들이 필요하지 않습니다. 또한 번들링을 위해 [systemjs-builder] (https://github.com/systemjs/builder)를 사용했으며 어떤 사람들은 [롤업] (https://rollupjs.org/)을 사용하고 있음을 알고 있습니다 – artem