Ich habe versucht, meine TypeScript "Anwendung" in eine einzige Javascript-Datei zu bündeln.Typescript Compiler - Externe Bibliotheken bündeln
Ich verwende keine Bundler aber TSC (mit TypeScript 2.2). Neben meinen eigenen ts-Dateien verwendet meine Anwendung auch externe Module wie immutablejs.
ich alle möglichen Thread, Dokumentation lesen, aber ich eine Möglichkeit, externe Module zu bündeln nicht finden können (von node_modules) in meine kompilierte/transpiled Javascript-Datei nur TSC verwenden.
Unten finden Sie ein Beispiel meines neuesten code/configu sowie die Ergebnisse meiner Versuche.
tsconfig.json
{
"compilerOptions": {
"target": "es5",
"module": "system",
"removeComments": true,
"sourceMap": true,
"allowJs": true
}
}
app.ts - Anmerkung: ./something.ts erfolgreich gebündelt.
/// <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 #: Verwendung von TSC-Bündel (https://www.npmjs.com/package/typescript-bundle)
dieses Verfahren nicht nur nicht immutableJs sowie geworfen den Fehler Bundle: erfordern nicht definiert.
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 Verwendung mit Modulsystem = (TSC src/app.ts -m System --outfile/app.js bauen)
diese Methode nicht auch immutableJs bündeln aber auch den Fehler ausgelöst: System nicht
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 definiert ist - unter Verwendung von TSC mit module = amd (TSC src/app.ts -m amd --outfile bauen/app.js)
Diese Methode bündelt nicht nur immutableJs, sondern wirft auch den Fehler: define ist nicht definiert.
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'));
});
Fazit: Es ist wirklich wichtig für die Zukunft meines Projektes externe Bibliotheken bündeln kann, ohne die Notwendigkeit dieser beliebten Bündler wie webpack, browserify, schluck, etc ...
Does kann mir jemand helfen?
Vielen Dank im Voraus,
TF!
Nur neugierig hilfreich - gibt es einen Grund, warum Sie webpack ablehnen und browserify aber bereit sind relativ unbekannt [Typoskript-Bundle] zu verwenden (https://github.com/sinclairzx81/typescript- bündeln)? Wie Sie gesehen haben, ist Typoskript kein Bundler, es enthält keine externen Abhängigkeiten in der Ausgabe, es sei denn, sie werden alle gleichzeitig mit Ihrem eigenen Code kompiliert. – artem
Hallo Artem, danke für die Antwort ... Der Grund, warum ich ablehne, ist nur einer. Ich muss den Webserver/Watcher/Task Runner verwenden, den ich erstellt habe. Denkst du, wäre das immer noch eine gute Idee/möglich, einen dieser Typen (Webpack, Schluck, Laube) nur als Bundler zu benutzen? –
Wenn Sie nur den Bundler benötigen, dann ist das Webpack mit [ts-loader] (https://github.com/TypeStrong/ts-loader) die naheliegendste Wahl - Sie brauchen sonst nichts anderes. Ich habe auch [systemjs-builder] (https://github.com/systemjs/builder) zum Bündeln verwendet, und weiß, dass einige Leute [Rollup] (https://rollupjs.org/) verwenden. – artem