从…起
https://www.typescriptlang.org/docs/handbook/modules.html
在TypeScript中,就像在ECMAScript 2015中一样,任何包含顶级
import
或
export
或
声明被视为一个脚本,其内容在全局范围内可用(因此也适用于模块)。
这种行为是令人惊讶和不想要的,我如何防止它?
lib.ts
,
var myglobal = 3;
console.log(`lib.ts: myglobal = ${myglobal}`);
然后考虑
main.ts
,导入的文件
关于其副作用:
import './lib.js';
console.log(`main.ts: myglobal = ${myglobal}`);
为了完整性,我提供了一个
tsconfig.json
:
{
"compilerOptions": {
"lib": ["ES2015", "DOM"],
"module": "ES2015",
"strict": true
},
"files": ["main.ts", "lib.ts"]
}
应该
未能编译,但tsc成功了,这让我很沮丧。然后将结果与汇总捆绑在一起。js,
export default {
input: "main.js",
output: {
file: "bundle.js",
format: "module",
},
};
myglobal
在里面
自由党。ts
主要的ts
,因为Rollup注意到
myglobal
main
并得出结论,应在
lib
var myglobal$1 = 3;
console.log("lib.ts: myglobal = " + myglobal$1);
console.log("main.ts: myglobal = " + myglobal);
当我运行它时,它失败了。
$ node bundle.js
lib.ts: myglobal = 3
/redacted/bundle.js:4
console.log("main.ts: myglobal = " + myglobal);
^
ReferenceError: myglobal is not defined
at Object. (/redacted/bundle.js:4:38)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12)
at internal/main/run_main_module.js:17:47
lib.js
作为一个模块,如我所愿?
(在搜索ES2015规范时,我找不到任何支持“任何包含顶级
进口
出口