如何禁用:[js] 文件是 CommonJS 模块;它可以转换为 ES6 模块

Posted

技术标签:

【中文标题】如何禁用:[js] 文件是 CommonJS 模块;它可以转换为 ES6 模块【英文标题】:How do I disable: [js] File is a CommonJS module; it may be converted to an ES6 module 【发布时间】:2018-09-10 00:00:26 【问题描述】:

以下是我要禁用的:

我在设置中找不到它。 帮助表示赞赏,因为这真的很烦人。

【问题讨论】:

【参考方案1】:

这是 Visual Studio Code 中添加的一项新功能,称为“建议代码操作”。 javascript 和 TypeScript 中默认启用“建议代码操作”。

您可以通过在用户/工作区设置中设置:"typescript.suggestionActions.enabled": false"javascript.suggestionActions.enabled": false 来禁用它们。可以在here找到文档。

(图片由Yusuf Yaşar提供。)

【讨论】:

有没有办法只关闭这个警告而不是所有的建议? 是的,这行得通,谢谢,不过最好只关闭该警告。 上面链接的主题以“我不明白为什么关闭。问题存在”和“我已锁定此问题,因为 +1 cmets 导致人们错过了已经存在禁用这些提示的解决方案。”。我不知道微软出了什么问题,也不知道他们为什么故意忽略承认存在问题。 在那个线程中没有人问如何关闭建议只关闭 nodejs 文件的 es6 导入建议,eslint 你定义了你想要的模块但它无法读取 eslint 配置? 遗憾的是,到 2020 年底这似乎仍然是一个问题【参考方案2】:

对于将 Vim 与 coc.nvim 一起使用的任何人,您可以通过在 :CocConfig 对象中添加相同的内容来进行相同的更改:

"javascript.suggestionActions.enabled": false

如果您之前没有向:CocConfig 添加任何设置,那么您需要确保将上述设置包装在 JSON 对象中:


    "javascript.suggestionActions.enabled": false

【讨论】:

是的!谢谢兄弟。 这不会停止所有与 JS 相关的建议吗? @ParsaNoori 是的,它确实如此,不幸的是没有更精确的方法 - 请参阅comments in the accepted answer【参考方案3】:

警告!对于喜欢智能编码辅助的 VSCode 用户来说,这种方法可能太过分了。将其与其他 linting 和测试实用程序一起用作简单快捷的帮助。


所述消息的存在控制位于Settings => Extensions => TypeScript(TypeScript !!! :P)

如截图所示,我在设置中搜索关键字“验证”,然后单击 TypeScript。这是第一项。

【讨论】:

这将禁用 javascript 的 所有验证。有点像“把婴儿和洗澡水一起扔出去”的情况。【参考方案4】:

其实这个烦人的建议来自 TypeScript。

因此,要关闭这个建议,你可以修改 TypeScript 的源代码,编译它,然后告诉 vscode 使用你的 TypeScript 分支。

作为一种快速而肮脏的 hack,只需删除与 ts.Diagnostics.File_is_a_CommonJS_module_it_may_be_converted_to_an_ES6_module 相关的逻辑,然后按照 TypeScript 的 README 中的说明编译项目。

编译会失败,因为删除相关逻辑会导致一些函数没有被使用,那么你只需删除那些未使用的函数定义并重新编译项目(gulp clean && gulp local)。

在你成功编译你的 TypeScript 分支之后,然后将你的用户 settings.json 更改为指向你的 vscode 分支:

"typescript.tsdk": "/path/to/your/fork/of/TypeScript/built/local",

完成。

重启你的 vscode,烦人的提示就消失了。

你可以查看this commit,看看哪些TypeScript源文件需要修改。

警告:修改快速且肮脏,使用它们需要您自担风险。如果你发现有什么问题,你可以删除 tsdk 配置,切换回 vscode 内置的 TypeScript。

【讨论】:

太繁琐了,怎么升级? @Run 要升级,只需拉取 typescript 存储库并再次重复该过程。但这是一个过时的答案。最新版本的 TypeScript 仍未解决此问题?【参考方案5】:

对于使用 Neovim 和 Native LSP 和 nvim-lspconfig 设置语言服务器的任何人,您可以通过在 tsserver 设置中的某处添加以下内容来禁用建议:

require('lspconfig').tsserver.setup(
    init_options = 
        preferences = 
            disableSuggestions = true,
        ,
    ,
)

您还可以使用nvim-lsp-ts-utils 插件过滤掉这个特定的诊断消息,同时通过在您的 tsserver 设置中添加它来保持启用建议:

require('lspconfig').tsserver.setup(
    on_attach = function(client, bufnr)
        require('nvim-lsp-ts-utils').setup(
            filter_out_diagnostics_by_code =  80001 ,
        )
        require('nvim-lsp-ts-utils').setup_client(client)
    end,
)

【讨论】:

我遵循了这个,但它对我不起作用:/ 我已经将此信息与官方 Lsp 文档和 typescript-language-server 文档进行了对比,这似乎是正确的。但是消息不断出现,不知道为什么。 确保您没有在 tsserver 上多次调用 setup。您需要在现有的 setup 调用中添加 init_options 块。 谢谢我再次检查,问题是我在第二次调用中覆盖了 on_attach 属性。删除它,消息就消失了。【参考方案6】:

如果您在 Next js 中遇到此错误,请尝试以下代码。

    Next.js 包含“next/babel”预设到您的应用程序,其中包括编译 React 应用程序和服务器端代码所需的一切。

    打开你的 .eslintrc.json

     "extends" : "next/babel" 
    

    但是如果你想扩展默认的 Babel 配置,也是可以的。 https://nextjs.org/docs/advanced-features/customizing-babel-config

【讨论】:

【参考方案7】:

也许你没有function(request, response), 试试吧。它对我有用

【讨论】:

请在您的回答中提供更多详细信息。正如目前所写的那样,很难理解您的解决方案。

以上是关于如何禁用:[js] 文件是 CommonJS 模块;它可以转换为 ES6 模块的主要内容,如果未能解决你的问题,请参考以下文章

node——Commonjs

JS模块化:CommonJS和AMD(Require.js)

前端工程化4:如何去做js模块化开发?ES Modules/CommonJS有什么区别?

02 Commonjs规范基础使用详解

Node.js 的 commonJS 规范 ES6 导入 js 文件

Node.js 的 commonJS 规范 ES6 导入 js 文件