узел —enable-source-maps не выводит имена функций

#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.0

2. Я использую 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