![](/img/trans.png)
[英]Node.js readline in debug-console in Visual Studio Code
[英]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
(無雙關語)。 它實質上可以歸結為具有嚴格模式兼容性的優化eval
: https : //whereswalden.com/2011/01/10/new-es5-strict-mode-support-new-vars-created-by-strict-mode-評估代碼僅限於該代碼本地/
因此:執行的代碼實際上是評估的代碼,而不是文件本身。
解決方案:要么使用它,要么將其更改為上游的“清潔”模塊。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.