在具有绝对路径(例如“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 文件不起作用的主要内容,如果未能解决你的问题,请参考以下文章