在具有绝对路径(例如“C:\...”)的 VSCode 扩展中要求 config.js 文件不起作用

Posted

技术标签:

【中文标题】在具有绝对路径(例如“C:\\...”)的 VSCode 扩展中要求 config.js 文件不起作用【英文标题】:Requiring config.js file in VSCode extension with absolute path (e.g. "C:\...") does not work在具有绝对路径(例如“C:\...”)的 VSCode 扩展中要求 config.js 文件不起作用 【发布时间】:2021-05-26 18:00:39 【问题描述】:

我正在开发Argdown VSCode extension。 Argdown 解析器可以使用argdown.config.json 文件或argdown.config.js 导出配置对象的文件进行配置。使用 javascript 文件是允许用户将自定义插件添加到 Argdown 解析器的最简单方法。

如果用户告诉解析器使用 Javascript 文件,则使用 import-fresh 加载文件(使用节点的 require,但删除缓存的版本。

使用 Argdown 命令行工具 (@argdown/cli) 可以正常工作,但在 VSCode 扩展中找不到配置文件的模块。该扩展使用绝对文件路径来要求配置模块(例如“C:\Users\my-username\projects\my-argdown-project\argdown.config.js”)。这些路径适用于 VScode 扩展之外的 import-fresh。

VSCode 扩展是否存在安全限制,不允许要求具有绝对文件路径的模块?还是有其他原因导致这不起作用?

【问题讨论】:

【参考方案1】:

这与 VSCode 无关。问题是由于将 import-fresh 与 webpack 捆绑在一起造成的。我以为 webpack 会忽略动态导入,但事实并非如此。

我很幸运:从上个月开始,webpack 支持"magic comments" for require(不仅用于导入)。所以我可以使用:

require(/* webpackIgnore: true */ file);

你必须在你的 webpack 配置中激活 magic cmets 支持:

module.exports = 
    parser: 
      javascript: 
        commonjsMagicComments: true,
      ,
    ,

现在下一个问题是如何将魔法 cmets 添加到 import-fresh 包中。为此,我使用了字符串替换加载器:

module.exports = 
  module: 
    rules: 
      
        enforce: "pre",
        test: /import-fresh[\/\\]index\.js/,
        loader: "string-replace-loader",
        options: 
          search:
            "return parent === undefined ? require(filePath) : parent.require(filePath);",
          replace:
            "return parent === undefined ? require(/* webpackIgnore: true */ filePath) : parent.require(/* webpackIgnore: true */ filePath);",
        ,
      ,
    
  

在那之后,我可以再次加载argdown.config.js 文件,即使在使用 webpack 捆绑所有内容之后也是如此。

【讨论】:

以上是关于在具有绝对路径(例如“C:\...”)的 VSCode 扩展中要求 config.js 文件不起作用的主要内容,如果未能解决你的问题,请参考以下文章

什么是绝对路径?什么是相对路径?举个例子

LCOV.INFO 有 SF 的绝对路径

JavaEE路径

java中的绝对路径和相对路径

假设路径C: WINDOWS system32始终存在是否安全?

java(web)相对路径,绝对路径