我正在开发一个混合了 TypeScript 和 JavaScript 文件的项目,并且我正在尝试为它们设置 linting 规则。我使用 ESLint 来 lint JS 文件,并使用typescript eslint 插件来 lint typescript 文件。由于我要添加 linting 的代码库相当大,我不得不关闭 JS 和 TS 的一些规则。当我尝试为 ESLint 创建配置文件时,这被证明是有点问题。在我的配置文件中。我有 JS 文件的主要规则集,然后为 *.ts 文件创建了一个覆盖部分,我可以在其中使用 typescript lint 规则。我的配置文件如下所示(规则部分只是代表性的)。
{
"extends": "eslint:recommended",
"rules": {
"no-unused-vars": "off",
"no-undef": "error",
"max-classes-per-file": "off"
},
"env": {
"es6": true,
"browser": true
},
"parserOptions": {
"ecmaVersion": 10
},
"overrides": [
{
"files": [
"*.ts"
],
"extends": [
"eslint:recommended",
"plugin:@typescript-eslint/recommended"
],
"rules": {
"@typescript-eslint/no-unsafe-argument": "off",
"@typescript-eslint/no-unsafe-member-access": "off"
},
"parserOptions": {
"project": …Run Code Online (Sandbox Code Playgroud) 在我的应用程序中,我必须查询系统和用户区域设置并将它们作为字符串返回(如en-US而不是语言代码).我可以从GetSystemDefaultLCID()和GetUserDefaultLCID()函数中获取这些语言的LCID,但我正在努力的是从LCID到语言字符串的转换.
我的应用程序也必须在Windows XP上运行,所以我不能使用LCIDToLocaleName()Win API.到目前为止我唯一能够获取语言环境名称的方法是使用GetLocaleInfo()Win API,方法是将LOCALE_SYSTEM_DEFAULT和LOCALE_USER_DEFAULT作为LCID和LOCALE_SISO639LANGNAME传递为LCType.我的代码看起来像查询系统区域设置
int localeBufferSize = GetLocaleInfo(LOCALE_SYSTEM_DEFAULT, LOCALE_SISO639LANGNAME, NULL, 0);
char *sysLocale = new char[localeBufferSize];
GetLocaleInfo(LOCALE_SYSTEM_DEFAULT, LOCALE_SISO639LANGNAME, sysLocale,localeBufferSize);
Run Code Online (Sandbox Code Playgroud)
但我得到的价值只是语言名称(仅限en-US).要获得完整的语言环境,我必须两次调用GetLocaleInfo()将LOCALE_SISO3166CTRYNAME作为LCType传递,然后附加两个值.有没有更好的方法来做到这一点?
我移植到Mono for Mac的代码调用了一个非托管的C++库.在Mac上,我已将非托管库移植到框架中(不幸的是,我们的构建过程只允许将其编译为框架而不是作为dylib).在Mono中,我在项目中设置了一个构建后步骤,以复制构建应用程序旁边的Framework文件.
但是当一个P/Invoke进入这个DLL时,我得到一个DllNotFound异常.我通读了Mono Interop Wiki,看起来Mono上的P/Invoke只会查看DYLD_*环境变量指向的位置,而当前目录不在搜索路径中.当我将Framework复制到/ Library/Frameworks时,我的P/Invoke调用工作正常,但我更喜欢我的Framework文件出现在App旁边而不是/ Library/Frameworks中.
在我执行任何P/Invoke调用之前,我尝试将当前工作目录添加到我的代码中的DYLD_FRAMEWORK_PATH环境变量,但System.Environment命名空间在Mono for Mac上具有有限的功能,并且不支持获取或设置环境变量.
无论如何,我可以将我的框架文件保留在应用程序旁边,仍然可以使用P/Invoke吗?
在尝试移植我们的一些 JS 代码以使用模块时,我遇到了这个我无法解释的特殊情况。我正在设置我的主要 JS 文件,以便为我的主要入口点进行动态导入,然后他们又为他们需要的所有文件进行导入。设置如下所示:
索引.js
(async function () {
await import('./firstLevel1.js');
await import('./firstLevel2.js');
})()
Run Code Online (Sandbox Code Playgroud)
第一层1.js
(async function () {
await import('./secondLevel1.js');
await import('./secondLevel2.js');
})()
Run Code Online (Sandbox Code Playgroud)
第一层2.js
(async function () {
await import('./secondLevel3.js');
await import('./secondLevel4.js');
})()
Run Code Online (Sandbox Code Playgroud)
由于我导入的某些代码是遗留代码,因此我将 index.js 的脚本标记设置为 async="false" 以确保所有文件都以正确的顺序加载。在这个特定的例子中,我希望加载顺序是 index.js、firstLevel1.js、secondLevel1.js、secondLevel2.js、firstLevel2.js。secondLevel3.js 最后是 secondLevel4.js。但是当我查看 chrome 中的加载顺序时,这就是我所看到的。
这对我来说变得有问题,因为 JS 加载的顺序不是我想要正确设置旧文件的顺序。
为什么我看到的加载顺序与我预期的不同?有没有办法让它们同步加载?