我正在使用TypeScript处理Electron应用程序,并且在尝试找出要使用的模块加载系统时遇到了一些问题。我一直在挖掘VS代码(因为许多人认为它是电子应用程序正确的“海报孩子”),以便更好地理解约定/做某些事情的最佳方法,我注意到他们正在使用AMD模块(在src下的tsconfig.json文件中,选项"module": "amd"
,"moduleResolution": "classic"
和"baseUrl": "."
都已设置)并且它们似乎正在使用类似于需求的调用事情,例如将URL加载到BrowserWindow中,他们使用require.toUrl('vs/workbench/electron-browser/bootstrap/index.html');
来获取要加载的完整URL。
从我(无可否认有限)的理解,这解决了我遇到的问题,我将TypeScript(位于src
目录中)编译到输出目录(称为out
),然后提供将.js文件发送给Electron来执行,这意味着我mainWindow.loadUrl(__dirname + '/index.html')
之类的路径突然指向out/index.html
而不是预期的src/index.html
。但是,当我在VS代码项目中搜索对requirejs模块的任何引用时,除了包含此代码的require.d.ts
文件之外,我找不到任何内容
declare var define: {
(moduleName: string, dependencies: string[], callback: (...args: any[]) => any): any;
(moduleName: string, dependencies: string[], definition: any): any;
(moduleName: string, callback: (...args: any[]) => any): any;
(moduleName: string, definition: any): any;
(dependencies: string[], callback: (...args: any[]) => any): any;
(dependencies: string[], definition: any): any;
};
declare var require: {
toUrl(path: string): string;
(moduleName: string): any;
(dependencies: string[], callback: (...args: any[]) => any, errorback?: (err: any) => void): any;
config(data: any): any;
onError: Function;
__$__nodeRequire<T>(moduleName: string): T;
};
我在我的项目中创建了一个包含此文件的打字文件,但是在运行我编译的JavaScript时出现define is not defined
错误。我的问题是:VS Code如何能够将AMD模块与标准Node require
模块一起使用,似乎没有使用像requirejs这样的东西,并且可以实现类似的模式来解决我在运行转换后的JavaScript代码时的路径问题输出目录?谢谢!