Как отлаживать файлы tsx при использовании webpack

Я новичок во фронтенд-разработке.

Я пишу компонент reactjs в формате tsx. это один из моих файлов tsx:

import * as React from "react";
import {observer} from "mobx-react";
import {observable} from "mobx";
import {TileGrid, Tile} from "./GridStack"




@observer
export class Dashboard extends React.Component<any, any>{

    addTiles() {

        this.props.data.push(
            {title: "I'm a !"}
        );
    }

    render() {
        return (
            <div>
                <h1>I'm dashboard !</h1>
                <button onClick={this.addTiles.bind(this)}>Add some tiles</button>
                <TileGrid columnCount="12">
                    {this.props.data.map((x) => {
                        return (
                            <Tile x="1" minWidth="2" minHeight="3">
                                {x.title}
                            </Tile>
                        )
                    })}
                </TileGrid>
            </div>
        )
    }
}

Как видите, он имеет формат Node Module. и он зависит от модуля GridStack.

Это мой файл tsconfig.json:

{
    "compileOnSave": true,
    "compilerOptions": {
        "sourceMap": true,
        "target": "es5",
        "module": "commonjs",
        "declaration": false,
        "noImplicitAny": false,
        "removeComments": true,
        "experimentalDecorators": true,
        "noLib": false,
        "jsx": "react"

    },
    "exclude": [
        "node_modules",
        "static"
    ]
}

выходные файлы js содержат такие команды, как reuqire(...), которые не определены для браузеров.

для решения этой проблемы я решил использовать webpack .

Это решает эту проблему, но теперь я столкнулся с новой проблемой.

Я не могу отлаживать файл GridStack.tsx, потому что веб-пакет просто позволяет мне отлаживать файл tsx корневого уровня.

это мой файл webpack.config.js:

module.exports = {
    entry: './TS/controllers/App.tsx',
    output: {
        filename: './dist/app.js'
    },
    devtool: 'source-map',
    resolve: {
        extensions: ['', '.Webpack.js', '.web.js', '.ts', '.js', '.tsx']
    },
    module: {
        loaders: [
                {
                    test: /\.tsx?$/,
                    exclude: /(node_modules|bower_components)/,
                    loader: 'ts-loader'
                }
        ],
        preLoaders: [
                // All output '.js' files will have any sourcemaps re-processed by 'source-map-loader'.
                { test: /\.tsx$/, loader: "source-map-loader" }
        ]
    }
}

Сборка и упаковка не являются моей текущей проблемой. Мне просто нужны js-файлы, дружественные для браузера, и возможность отладки каждого tsx-файла.

Ваша помощь будет оценена по достоинству.


person Ehsan    schedule 21.09.2016    source источник
comment
мы отлаживаем файлы ts без каких-либо специальных действий. мы не используем предварительный загрузчик, но используем awesome-ts-loader вместо ts-loader. Если это не решит проблему, я могу более подробно изучить наш репозиторий.   -  person mweststrate    schedule 22.09.2016
comment
Спасибо @mweststrate. Я решил свою проблему, используя requirejs. Но я буду использовать awesome-ts-loader. Какой плагин вы используете для преобразования файлов ts в js, удобный для браузера?   -  person Ehsan    schedule 22.09.2016


Ответы (1)


Ответ для тех, у кого такая же проблема. Порядок расширений важен. Сначала я упомянул «tsx», а затем другие типы. когда для параметра compileOnSave установлено значение true, каждый файл tsx будет иметь соответствующий файл js. в этой ситуации, когда расширение .js появляется раньше, Webpack захватывает файл js вместо файла tsx.

person Ehsan    schedule 13.10.2016