2016-10-28 49 views
5

Przed użyciem pakietu Webpack do pakowania aplikacji tworzyłem moduły za pomocą IIFE, a następnie dołączając je do obiektu window, aby uzyskać do nich dostęp. To sprawiło, że debugowanie w przeglądarce Chrome było bardzo proste, ponieważ moduły są dostępne na całym świecie i mogłem sprawdzić je za pomocą punktów przerwania.Jak sprawdzić moduły ES6 w debuggerze chrome

Niedawno przeszedłem do korzystania z pakietu Webpack, aby spakować moją aplikację, co było świetne. Jednak teraz, gdy ustawiam punkty przerwania i chcę sprawdzać importowane moduły, nie mogę tego zrobić, odwołując się do nazwy modułu. Jestem pewien, że to dlatego, że pod maską, Webpack zmienia nazwę modułów na coś innego.

Oto przykład sprawozdania przywozowych w danym pliku (btw, każdy z importowanych modułów importowania Object):

import statements

I w tym samym pliku, kiedy ustawić punkt przerwania, Chciałbym móc sprawdzić zawartość modułów, tak jak kiedyś mogłem. Na poniższym obrazku próbuję uzyskać dostęp do modułu CustomHelpers, który jest po prostu zbiorem funkcji pomocniczych przechowywanych w obiekcie.

chrome console with breakpoint

Wszelkie myśli o tym w jaki sposób można odwołać tych importowanych modułów podczas debugowania w konsoli Chrome?

Dla wyjaśnienia, mój webpack.config.js działa i mam włączone sourcemaps, dlatego widzę oryginalny plik zamiast zniekształconych plików bundle.js. Dokładniej, próbuję po prostu sprawdzić, czy importowałem i widzę ich zawartość.

+0

Czy używasz zminimalizowanych pakietów? Wiem, że punkty przerwania Chrome na sourcemaps nie działają znakomicie, jeśli wygenerowane skrypty są zminimalizowane. Nawet jeśli nie są one trafione i pomijane. Zwykle lepiej jest umieścić w źródle instrukcje "debuggera", ponieważ mają dokładnie taki sam efekt! – Ambroos

Odpowiedz

1

w webpack.config.js:

  • set debug flaga true
  • wskazują devtool

tak:

module.exports = { 
entry: "./index.js", //"./tryfirst/tree.js", // 
output: { 
    path: __dirname, 
    filename: "bundle.js" 
}, 
debug: true, 
devtool: 'cheap-module-eval-source-map', 
module: { 
    loaders: [ 
    ... 

Jeśli są używane do rozruchu Babel z linii poleceń, możesz ustawić te same opcje w linii poleceń, tak:

babel src -d lib --presets es2015 --sourceMaps inline; webpack --devtool eval-source-map 

Ta sama linia może zostać dodana do package.json jako skrypt. Wystarczy dodać coś takiego do sekcji „scripts”:

"scripts": { 
    ..., 
    "test": "babel src -d lib --presets es2015 --sourceMaps inline; webpack --devtool eval-source-map" 
}, 

Następnie można go uruchomić łatwo z poleceń bez konieczności pamiętać wszystkie opcje i flagi:

npm run test 

kod wewnątrz skryptów działa dokładnie (przynajmniej w większości) tak, jak piszesz na konsoli. npm run test (lub jakkolwiek nazywasz skrypt) jest skrótem, którego możesz używać od tej pory.

Jeśli nadal nie zatrzymuje się w punktach przerwania, spróbuj dodać polecenie "debugger;" w pożądanym punkcie przerwania wewnątrz twojego aktualnego kodu javascript. Wygląda zabawnie, ale zwykle robi lewę. Chrome znajdzie je dla Ciebie i ustawi w nich pułapki.

+0

Hm, więc myślę, że nie rozumiesz mojego pytania - mam działającą wersję webpack.config.js i mam włączoną obsługę sourcemaps, dlatego jej mapowanie z powrotem do oryginalnego pliku zamiast zniekształconego pliku bundle.js. Jednakże, gdy ustawiam punkty przerwania w sourcemap i chcę specjalnie kontrolować zawartość importowanych MODUŁÓW, tam ich nie widzę. – wmock

+1

Hi @ wmock, myślę, że zrozumiałem twoje pytanie, ale działa ono dla mnie z tą konfiguracją - nawet z punktami przerw ustawionymi w module node_module. Próbowałem tylko sprawdzić, czy "code'exclude:/node_modules /" code "w konfiguracji babel-loader ma znaczenie, ale w moim przypadku jest ustawione i działa tak. Z drugiej strony występujące błędy (i to zwykle, gdy potrzebne jest debugowanie) czasami uniemożliwiają pracę dymków nagle, ale to nie ogranicza się do plików modułów. – achimbode

+0

Dzięki za kontynuację - zastanawiam się, czy to dlatego, że brakuje mi konfiguracji 'debug: true' w moim pliku' webpack.config.js', ponieważ wszystko inne w twojej konfiguracji jest tym, co mam również w mojej. – wmock