microsoft / microsoft/TypeScript

Code generated by Webpack shows error in `exports` parameters in module lambdas as if they were a conflicting global `exports`

Aperta
#59,420 3 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Awaiting More Feedback Suggestion
Lingua principale
Go
Stelle
111k
Fork
14.4k
Merge medio
1g 19h
PR unite (30g)
117

Descrizione

🔎 Search Terms

webpack Cannot redeclare exported variable __esModule ts2323 ts 2323 ts(2323)

🕗 Version & Regression Information
  • This is the behavior in every version I tried, and I reviewed the FAQ for entries about Common "Bugs" That Aren't Bugs
⏯ Playground Link

https://www.typescriptlang.org/play/?strict=false&noImplicitAny=false&strictPropertyInitialization=false&strictBindCallApply=false&alwaysStrict=false&esModuleInterop=false&declaration=false&target=99&jsx=0&module=0&noFallthroughCasesInSwitch=true&ts=5.5.3&filetype=js#code/PQKj+ACAKaEpIF4B8kDelhQO4FMBGADgIYDGA1gEID21ALgM50BOxhAUKOGFAJABuxZpAD6IvETLkRAW2oATAK4AbXAzFIYAbU4hIABkghgunjGhjFAO0UNc88QRIVZClbgA0kXAA9C1ZkYvMQlnaWZcAEdFAEsIsQQUdHZ2ACJbXEgmZhjSOlSAbhSAeXwAK1w8gDp5XAAzGKtcAAVmakJcQIBPaF9-QIYvVLE1AFk3VVSvaAxBZUVcAC5IFgXIAF84OCKsSC1SBUzqOsg5JVUDAF0UrmMNuA9dSABGIxNbqFhLGzsHUKlXOdPN4-AFGIlUGgUuk7FkWLl8kV2KUKtVag0mq12p06D0+mDBpBhiIxhNcFMYLNiPMlitmGtNttOFB9odIMdTmSXl5cHRSFUBdcbhB7o9biLeJcmeLuLK5fKFYqlcqFe85XxdgAVAAWmTO7kgpDIutM3D4gmEIScAP1qhERtIuo0iHQ6x26sgvFNEq1usgEWicUydWseRi1Cs3rMvBDVjDEdEjkkLgDsXiImgttwAEl5AgoTK7rxeLsAMK6iiQGInLNVhhVqyG424KNFgRCJuO+zjIGaK3J6RZ+3NsRaLO5y7u2V8XjVmAO3XyHsGgCEiBd1nRjXs+dbM94EToimYjYX3bJVXxAynZs9vHWe7vZYixDomWIkCa2E5vegxCs8iQIQih0FWoGNHQ1ArH6Z5wI+xYWj+Bouv2YSAu4w5dqO47yJcmgFh6xYllAVhQVmVQxIBTT2PY8HFrspFIaoVTKNQxC1FRuA0fIdG8FejDLGgD6FjObrwXRuwAKI+JUIGZHQfq1rG8aRiJd6oTaZLqCIY5khOmZkl45H8YSGkplEaa4AkN4ShJUAAEq8sejYKZkJnsicrlMS2anFoezneZeoLXvBwmEa2KqRVF0Uqmq06evBuxMEIR4cL5uwADJsYBuBWCwXTeZA-6Af5J4gv0jCJVAOoxPWuX5YVtX+vUnS5aQ9iQPgBX0LqwhZvWDBQTEoFGlYADkoH4JkjTKNuPG+YhZnSCZzqJv85mBum0D6NKhGLUmaH8SIdBCAA5ryq0mTZ0Z1AE0CITEDZrdaLgrSICBLSSwV0MdZ0XTpMR4ShB0Am9WiA9dRbVhYIOvd92lVCMDDLqoCAopUdA1PU25Yh03Qw+ty3fb9zDnT9IhDEjKPkl4VI0ssqyZJskN8I+mzwOwRRAA

💻 Code
/******/ (() => { // webpackBootstrap
/******/ 	var __webpack_modules__ = ([
/* 0 */
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";

Object.defineProperty(exports, "__esModule", ({ value: true }));
// [code of module 0]

/***/ }),
/* 1 */
/***/ ((__unused_webpack_module, exports) => {

"use strict";

Object.defineProperty(exports, "__esModule", ({ value: true }));
// [code of module 1, etc...]


/***/ }),
/******/ 	]);
/************************************************************************/
/******/ 	// The module cache
/******/ 	var __webpack_module_cache__ = {};
/******/ 	
/******/ 	// The require function
/******/ 	function __webpack_require__(moduleId) {
/******/ 		// Check if module is in cache
/******/ 		var cachedModule = __webpack_module_cache__[moduleId];
/******/ 		if (cachedModule !== undefined) {
/******/ 			return cachedModule.exports;
/******/ 		}
/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = __webpack_module_cache__[moduleId] = {
/******/ 			// no module.id needed
/******/ 			// no module.loaded needed
/******/ 			exports: {}
/******/ 		};
/******/ 	
/******/ 		// Execute the module function
/******/ 		__webpack_modules__[moduleId](module, module.exports, __webpack_require__);
/******/ 	
/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}
/******/ 	
/************************************************************************/
/******/ 	
/******/ 	// startup
/******/ 	// Load entry module and return exports
/******/ 	// This entry module is referenced by other modules so it can't be inlined
/******/ 	var __webpack_exports__ = __webpack_require__(0);
/******/ 	var __webpack_export_target__ = exports;
/******/ 	for(var i in __webpack_exports__) __webpack_export_target__[i] = __webpack_exports__[i];
/******/ 	if(__webpack_exports__.__esModule) Object.defineProperty(__webpack_export_target__, "__esModule", { value: true });
/******/ 	
/******/ })()
;

🙁 Actual behavior

Error TS2323 on every line below:

Cannot redeclare exported variable '__esModule'.

Object.defineProperty(exports, "__esModule", ({ value: true }));

It's ignoring the fact exports is a lambda parameter, which should not make it conflict with the ones in other lambdas as if it's the same global exports object. It's like it's treating it as a keyword?
In fact, if you were to rename all those parameters to something else is has no errors (at least in VSCode, TS v5.5.3).

🙂 Expected behavior

No errors should be shown.
Lambda parameter named exports should be treated as just a parameter, not special.
Or at least should be scoped so it doesn't conflict with the other lambdas (which are the way webpack packs modules).

Additional information about the issue

In case it's relevant, here's part of the webpack.config.js.
Use case is bundling a VSCode extension (with multiple modules) for the Web, then inspecting the generated code.

/** @type import('webpack').Configuration */ module.exports = {
  mode: 'none',
  target: 'webworker',
  output: {
    //...
    libraryTarget: 'commonjs',
  },
  resolve: {
    mainFields: ['browser', 'module', 'main'],
    extensions: ['.ts', '.js'],
    //...
  },
  module: {
    rules: [
      {
        test: /\.ts$/,
        exclude: /\bnode_modules\b/,
        use: [
          {
            loader: 'ts-loader',
            //...
          }
        ]
      }
    ]
  },
  externals: {
    vscode: 'commonjs vscode',
  },
  performance: {
    hints: false,
  },
  devtool: 'nosources-source-map',
  //...
};

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

Inizia dalla riproduzione collegata di TypeScript Playground e dal codice module-lambda generato; webpack.config.js fornisce il contesto di bundling. Confronta le diagnosi per i parametri exports originali con la variante con il parametro rinominato, quindi traccia come viene gestito lo scope lambda. Il lavoro è completato quando lo snippet originale non segnala più TS2323, mentre le redeclarazioni effettive continuano a essere diagnosticate.

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

Valutazione

Stack tecnologico
javascript, typescript, webpack
Ambito
compilers, tooling
Tipo di issue
Bug
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Ferma
Chiarezza
Abbastanza chiara
Idoneità per principianti
35/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.