#node.js #source-maps
#node.js #источник-карты
Вопрос:
Я пытаюсь установить новый экспериментальный флаг узла --enable-source-maps
из исходных карт статьи в Node.js и хотя он выводит правильные номера строк, похоже, что он не выводит имена функций.
Учитывая следующее:
package.json
{
"name": "node-sourcemaps",
"version": "1.0.0",
"main": "index.js",
"license": "MIT",
"dependencies": {
"source-map-support": "^0.5.19",
"webpack": "^4.44.2",
"webpack-cli": "^3.3.12"
}
}
index.js
const functionA = () => {
functionB()
}
const functionB = () => {
functionC()
}
const functionC = () => {
functionD()
}
const functionD = () => {
throw new Error('Roh Ruh')
}
functionA()
Генерация переданного вывода и исходной карты:
> npx webpack ./index.js --devtool source-map --target node --mode production
А затем выполнить его с помощью узла и флага:
❯ node --enable-source-maps .distmain.js
Error: Roh Ruh
at o (D:spikesnode-sourcemaps-spikedistmain.js:1:970)
-> D:spikesnode-sourcemaps-spikedistwebpack:index.js:14:9
at n (D:spikesnode-sourcemaps-spikedistmain.js:1:952)
-> D:spikesnode-sourcemaps-spikedistwebpack:index.js:10:3
at r (D:spikesnode-sourcemaps-spikedistmain.js:1:940)
-> D:spikesnode-sourcemaps-spikedistwebpack:index.js:6:3
at Object.<anonymous> (D:spikesnode-sourcemaps-spikedistmain.js:1:992)
-> D:spikesnode-sourcemaps-spikedistwebpack:index.js:2:3
at r (D:spikesnode-sourcemaps-spikedistmain.js:1:110)
-> D:spikesnode-sourcemaps-spikedistwebpack:webpackbootstrap:19:22
at D:spikesnode-sourcemaps-spikedistmain.js:1:902
-> D:spikesnode-sourcemaps-spikedistwebpack:webpackbootstrap:83:10
at Object.<anonymous> (D:spikesnode-sourcemaps-spikedistmain.js:1:911)
at Module._compile (internal/modules/cjs/loader.js:956:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:973:10)
at Module.load (internal/modules/cjs/loader.js:812:32)
Вы можете видеть, что номера строк указаны правильно, однако имена функций скрыты.
Если я повторю то же самое, но с использованием source-map-support
пакета
require('source-map-support').install()
const functionA = () => {
functionB()
}
const functionB = () => {
functionC()
}
const functionC = () => {
functionD()
}
const functionD = () => {
throw new Error('Roh Ruh')
}
functionA()
Выполнение его с использованием узла, но без флага:
❯ node .distmain.js
D:spikesnode-sourcemaps-spikedistwebpack:index.js:16
throw new Error('Roh Ruh')
^
Error: Roh Ruh
at functionD (D:spikesnode-sourcemaps-spikedistwebpack:index.js:16:9)
at functionC (D:spikesnode-sourcemaps-spikedistwebpack:index.js:12:3)
at functionB (D:spikesnode-sourcemaps-spikedistwebpack:index.js:8:3)
at Object.call (D:spikesnode-sourcemaps-spikedistwebpack:index.js:4:3)
at __webpack_require__ (D:spikesnode-sourcemaps-spikedistwebpack:webpackbootstrap:19:22)
at D:spikesnode-sourcemaps-spikedistwebpack:webpackbootstrap:83:10
at Object.<anonymous> (D:spikesnode-sourcemaps-spikedistmain.js:1:911)
at Module._compile (internal/modules/cjs/loader.js:956:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:973:10)
at Module.load (internal/modules/cjs/loader.js:812:32)
Вы можете увидеть правильные номера строк и имена функций.
Это ограничение поддержки исходной карты узла или я неправильно понимаю?
Комментарии:
1. какая версия вашего узла? похоже, поддержка
--enable-source-maps
флага была добавлена в версии 12.12.02. Я использую node v12.13.0
Ответ №1:
Похоже, в документах для поддержки source-map у вас есть 2 варианта:
Использование CLI
// edited to match your example
node -r source-map-support/register dist/main.js
Программное использование
Чтобы использовать этот способ, вы просто помещаете эту строку в начало вашего файла
require('source-map-support').install();
Любой из них будет работать. Я считаю, что этот пакет является скорее альтернативой --enable-source-maps
флагу, и вам не нужно использовать их вместе
Комментарии:
1. Извините, я не понимаю. Если я использую
source-map-support
пакет, я получаю результаты, которые мне нужны. Я пытаюсь воспроизвести те же результаты без использованияsource-map-support
встроенного флага с использованием узлов--enable-source-maps
, однако в этом случае я получаю номера строк, но не имена функций2. извините, кажется, я неправильно понял вопрос. похоже
--enable-source-maps
, что флаг работает по назначению, я не думаю, что он предназначен для отображения имен функций, просто для указания на исходный файл. похоже, что добавление строки и имен функций является особенностьюsource-map-support
пакета @kimsagro