6

我想在我的开发设置中使用带有函数的css-loader 。:local()

没有错误: import './sidebar.css';

它编译没有问题,但是我不知道如何访问我.tsx文件中的本地类名。

错误: import classNames from './sidebar.css';

我在这里得到:error TS2307: Cannot find module './sidebar.css'

解释我的设置:

  1. .tsx文件通过 gulp-typescript (ES5) 编译成 commonjs 模块
  2. commonjs 模块通过 webpack 编译并缩小为 JS

sidebar.tsxapp.tsx如果重要,则导入)

import classNames from './sidebar.css';

侧边栏.css

.sl-sidebar {
  background-color: yellow;
}

gulpfile.js

Gulp 任务将.tsx文件编译为 commonJS 模块(当然在 webpack-task 之前运行):

gulp.task('gui-tsx', function () {
    return gulp.src(config.guiTsxPath + '**/*.tsx')
        .pipe(ts({
            jsx: 'react',
            outDir: config.guiCompiledPath,
            module: 'commonjs',
            target: 'ES5'
        }))
        .pipe(gulp.dest(config.guiCompiledPath));
});

我的 gulp-webpack 任务:

gulp.task('gui-webpack', function () {
    webpack({
        bail: false,
        debug: true,
        entry: './' + config.guiCompiledPath + 'app.js',
        output: {
            filename: "gui.js",
            path: './' + config.pubPath + 'js'
        },
        devtool: "#inline-source-map",
        plugins: [
            new webpack.optimize.UglifyJsPlugin({
                compress: {
                    warnings: false
                },
                output: {
                    comments: false,
                    semicolons: true
                },
                sourceMap: true
            })
        ],
        module: {
            loaders: [ {
                test: /\.css$/,
                loader: 'style-loader!css-loader?modules'
            }]
        }

    }, function (err, stats) {
        if (stats.compilation.errors.length > 0) {
            console.log(stats.compilation.errors[0].message);
        }
    });
});

我究竟做错了什么?

编辑:我刚刚发现: https ://github.com/Microsoft/TypeScript/issues/2709 但我不太明白。这是否意味着我必须将我的 CSS 声明为模块?

4

2 回答 2

7

typescript 无法加载或理解 css 文件,但它可以与 webpack 一起使用。要告诉 TypeScript 有些文件的结尾不是 *.ts,您必须为相应的文件类型声明一个通配符模块。只需将其放入项目中包含的 *.d.ts 文件中即可。

// declaration.d.ts
declare module '*.css' {
    const content: any;
    export default content;
}
于 2017-02-02T22:16:36.743 回答
2

要加载非 ts 资源,只需声明require函数并使用导入的资源(as any)。

文档:https ://github.com/TypeStrong/ts-loader#code-splitting-and-loading-other-resources

于 2015-10-21T23:04:57.670 回答