microsoft / microsoft/TypeScript

tsc does not use amd-module name when emitting dynamic imports

Aperta
#29,480 0 commenti 21 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Awaiting More Feedback Domain: JS Emit Suggestion
Lingua principale
Go
Stelle
111k
Fork
14.3k
Merge medio
2g 4h
PR unite (30g)
132

Descrizione

TypeScript Version: 3.3.0-dev.20190118

Search Terms: amd-module, optional, dynamic, directive

Code

Scripts/foo.ts

///<amd-module name="customNameFoo" />

export function hello() {
    console.log('hello world');
}

Scripts/bar.ts

///<amd-module name="customNameBar" />

async function myFunction(): Promise<void> {
	//Dynamically import foo
        var fooModule = await import('./foo');

	fooModule.hello();
}

tsconfig.json

{
	"compileOnSave": true,
	"compilerOptions": {
		"target": "es5",
		"outDir": "GeneratedScripts",
		"module": "amd",
		"lib": [
			"es2015.promise",
			"dom",
			"es5",
			"scripthost"
		]
	},
	"include": [
		"Scripts/**/*"
	],
	"exclude": [
		"GeneratedScripts"
	]
}

would expect that the call to require would use the amd-module name for foo ("customNameFoo") and not "./foo". (If we non-dynamically imported foo, then the generated 'define' would refer to foo by it's amd-module name)
GeneratedScripts/bar.js

//...

return __generator(this, function (_a) {
                switch (_a.label) {
                    case 0: return [4 /*yield*/, new Promise(function (resolve_1, reject_1) { require(['./foo'], resolve_1, reject_1); })];
                    case 1:
                        fooModule = _a.sent();
                        fooModule.hello();
                        return [2 /*return*/];
                }
            });

Expected behavior: The generated amd code for a dynamic import should use the name of the module specified in the amd-module directive

Actual behavior: The generated code for the dynamic import uses relative path to the module

Related Issues:
https://github.com/Microsoft/TypeScript/pull/1158
https://github.com/Microsoft/TypeScript/issues/28760

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Riproduci il problema con Scripts/foo.ts, Scripts/bar.ts e tsconfig.json, quindi esamina il punto di ingresso del compilatore per l’emissione delle importazioni dinamiche AMD. Confronta GeneratedScripts/bar.js con l’output previsto; il lavoro è completato quando la chiamata require generata utilizza il nome del modulo AMD personalizzato customNameFoo di foo invece di './foo'.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
typescript
Ambito
compilers
Tipo di issue
Bug
Difficoltà
3/5
Tempo stimato
1-2 giorni
Stato di attività
Ferma
Chiarezza
Specificata chiaramente
Idoneità per principianti
48/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.