これは、達成するのが比較的簡単なはずだったように思えますが、悲しいかな。
ES6クラスがあります:
'use strict';
export class BaseModel {
constructor(options) {
console.log(options);
}
};
そしてそれを使用するルートモジュール:
'use strict';
import {BaseModel} from './base/model.js';
export let init = function init() {
console.log('In Bundle');
new BaseModel({a: 30});
};
私の目標は:
いくつかのトライアルの後、これは私が持っているwebpack構成です:
{
entry: {
app: PATH.resolve(__dirname, 'src/bundle.js'),
},
output: {
path: PATH.resolve(__dirname, 'public/js'),
filename: 'bundle.js'
},
devtool: 'inline-source-map',
module: {
loaders: [
{
test: /\.js$/,
exclude: /(node_modules|bower_components)/,
loader: 'babel'
}
]
}
}
これはある程度機能しているようです。
だから、私はそれを行うことができます:
F11をクリックしてコードを入力できますが、BaseModel
を評価できません:
これは、デバッグの目的(または目的の1つ)を無効にします。
試してみましたsource-map-loader
をさまざまな順序でbabel-loader
に追加しました:
{
test: /\.js$/,
loader: "source-map-loader"
}
無駄に。
サイドノート1:webpackを放棄し、Babel経由でソースマップを使用してモジュールをSystem.jsなどにコンパイルする場合:
babel src/ --out-dir public/js/ --debug --source-maps inline --modules system
サイドノート2:この?sourceMaps=true
は何もしないようです。なぜなら、webpackからソースマップ設定を削除すると、ソースマップは保存/生成されないからです。まったく。最初の、バベルで作成されたソースマップが結果のファイルに保存されることが予想されます。いや。
どんな提案でも大歓迎です
これは 現在シンボル名のマッピングをサポートしていない のJavascriptソースマップ、およびES2105モジュール構文からCommonJSにコンパイルするときにimport
- edモジュールの名前を変更するbabelの問題です。 。
Babelは、ES2015モジュール エクスポートバインディング という事実を完全にサポートするためにこれを行います。インポート時ではなく、コードで使用されるときは常にインポートへのすべての参照を解決します。
バインディングのエクスポートに依存するモジュールを作成していない場合(おそらく、CommonJSで実際にこれを行うことができなかったため)、ES2015をトランスコンパイルするときに変数名を保持することをお勧めします。変数名を保持するBabel 6のネイティブbabel commonjsモジュール変換の代替を作成しました: babel-plugin-transform-es2015-modules-commonjs-simple 。これは、ネイティブのbabel変換であるbabel-plugin-transform-es2015-modules-commonjs
のドロップイン置換です。
これはwebpackまたはノードで使用できます。一般的な構成は次のとおりです。
npm install --save-dev babel-preset-es2015-webpack
npm install --save-dev babel-plugin-transform-es2015-modules-commonjs-simple
モジュールbabel-preset-es2015-webpack
は、代替バージョンを使用するため、モジュール変換をnot含める標準es2015プリセットのフォークです。これはノードでも機能します。これらのモジュールは.babelrc
で使用されます:
{
"presets": [
"es2015-webpack"
],
"plugins": [
"transform-runtime",
["transform-es2015-modules-commonjs-simple", {
"noMangle": true
}]
]
}
transform-runtime
は、通常、生成されたコードの余分な繰り返しを避けるために、実質的なプロジェクトに含めることをお勧めします。 webpack.config.js
の典型的なモジュール構成:
module: {
loaders: [
{
loader: "babel-loader",
include: [path.resolve(__dirname, "src")]
}
]
},
devtool: '#inline-source-map'
結果のコードはインポートの名前を変更しないため、ソースマップを使用してデバッグすると、シンボルにアクセスできます。
オリジナルではなく、コンパイルされた変数名を使用する必要があります。ソースマップでは、ブラウザはコンパイルされたコードに対応するソースコードのみを表示できます。コンパイルされたコードの元の変数名をブラウザーに解決させることはできません。
コンパイルされた変数名を表示するには、コンパイルされたソースに切り替えるか、右側の[スコープ変数]ペインを確認します。これにより、現在のスコープに存在する変数が表示されます。
IIRC Babelはモジュール名の前に_
を付ける傾向があるため、BaseModel
変数はおそらく_baseModel
または類似の名前になります。
私は声明を追加することでいくつかの成功を収めました
デバッガ;
angularまたは* .vueのようなvue2のフレームワークファイルでも、javascript/TypeScriptファイルで
そのため、ファイルが変換、変更、名前変更されたり、URLへのパスマッピングが機能しない場合でも、デバッガーはステップ実行します。