【发布时间】:2020-10-30 16:47:12
【问题描述】:
使用 Webpack:
const WebpackConfig = {
// ...
plugins: [
new Webpack.DefinePlugin({
__IS_DEVELOPMENT_BUILDING_MODE__: isDevelopmentBuildingMode,
__IS_TESTING_BUILDING_MODE__: isTestingBuildingMode,
__IS_PRODUCTION_BUILDING_MODE__: !isDevelopmentBuildingMode && !isTestingBuildingMode
})
]
}
现在我将使用 TS-Node 代替 Webpack。 TS-Node 看不到这些常量:
ErrorsReportingService.ts:35:9 - error TS2304: Cannot find name '__IS_DEVELOPMENT_BUILDING_MODE__'.
如何为 TS-Node 初始化这些全局变量?
当然,正在提供这些常量的类型:
declare const __IS_DEVELOPMENT_BUILDING_MODE__: boolean;
declare const __IS_TESTING_BUILDING_MODE__: boolean;
declare const __IS_PRODUCTION_BUILDING_MODE__: boolean;
请注意,我需要 Webpack 和 TSNode。
概念层面的解决方案
- 创建文件并初始化全局变量(如
globalThis.__IS_DEVELOPMENT_BUILDING_MODE__ = false?) - 告诉 TSNode 先执行这个文件。
现在的问题是 TSNode 是否允许这样的事情。
更新
我的 TypeScript 在将它们放入 declare global {} 后丢失了声明的全局变量:
typings.d.ts
declare global {
let __IS_DEVELOPMENT_BUILDING_MODE__: boolean;
let __IS_TESTING_BUILDING_MODE__: boolean;
let __IS_PRODUCTION_BUILDING_MODE__: boolean;
}
现在编译器看不到它们:
TS2304: Cannot find name '__IS_DEVELOPMENT_BUILDING_MODE__'.
【问题讨论】:
-
说起来很奇怪——只是你放弃了 webpack 并要求一种方法来添加它的行为? webpack.js.org/configuration/configuration-languages/…
-
@Estradiaz 因为我需要 Webpack 和 TSNode。
-
嗯,也许我误解了你的问题,所以你想使用这些,但打字稿抱怨,即使你在 .d.ts 文件中提供这些声明?
标签: node.js typescript ts-node