簡體   English   中英

使用Visual Studio Code調試“必需”的Node.js依賴項

[英]Use Visual Studio Code to debug Node.js dependency which is “require”d

我想使用VSC為現有項目開發一些擴展。 特別是UglifyJS3。

因此,我創建了一個測試腳本,在其中調用模塊來測試和調試更改。 那里的代碼很簡單:

var UglifyJS = require("../tools/node");
var result = UglifyJS.minify(code, ...)

在調試/單步執行時有效。 但是,VSC已經無法解析由UglifyJS導出的minify函數。
我也不能簡單地在UglifyJS文件中設置斷點並觸發它們。 VSC在啟動時顯示有關無法解析斷點的錯誤。

../tools/node.js我看到類似的代碼:

var UglifyJS = exports;
require.resolve("../lib/utils.js")
...
require.resolve("../lib/minify.js")
require.resolve("./exports.js")

exports.js包含exports["minify"] = minify;

有什么我想念的嗎? 如何使調試(以及可選的IntelliSense)工作?

我找到了原因:

第一個線索是代碼在調試器中顯示為<eval>和在VM<some number>選項卡中。 因此,代碼實際上並沒有從文件中讀取,而是經過了動態評估。

發生了什么(作為簡化示例):

var fn = require.resolve("<file>"); // Resolve the filename
var code = fs.readFileSync(fn, "utf8");; // Read the file contents
new Function("exports", code)(exports); // Create a new function containing the files code and execute it

最后一點是代碼更神秘, new Function對我來說是new Function (無雙關語)。 它實質上可以歸結為具有嚴格模式兼容性的優化evalhttps : //whereswalden.com/2011/01/10/new-es5-strict-mode-support-new-vars-created-by-strict-mode-評估代碼僅限於該代碼本地/

因此:執行的代碼實際上是評估的代碼,而不是文件本身。

解決方案:要么使用它,要么將其更改為上游的“清潔”模塊。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM