【发布时间】:2016-05-03 00:48:01
【问题描述】:
我想在一个用 Typescript 编写的 React 应用程序中使用带有 webpack 'modules' 选项的 css-loader。 This example 是我的出发点(他们使用 Babel、webpack 和 React)。
webpack 配置
var webpack=require('webpack');
var path=require('path');
var ExtractTextPlugin=require("extract-text-webpack-plugin");
module.exports={
entry: ['./src/main.tsx'],
output: {
path: path.resolve(__dirname, "target"),
publicPath: "/assets/",
filename: 'bundle.js'
},
debug: true,
devtool: 'eval-source-map',
plugins: [
new webpack.optimize.DedupePlugin(),
new webpack.optimize.UglifyJsPlugin({minimize: true})
],
resolve: {
extensions: ['', '.jsx', '.ts', '.js', '.tsx', '.css', '.less']
},
module: {
loaders: [
{
test: /\.ts$/,
loader: 'ts-loader'
},
{
test: /\.tsx$/,
loader: 'react-hot!ts-loader'
}, {
test: /\.jsx$/,
exclude: /(node_modules|bower_components)/,
loader: "react-hot!babel-loader"
},
{
test: /\.js$/,
exclude: /(node_modules|bower_components)/,
loader: "babel-loader"
}, {
test: /\.css/,
exclude: /(node_modules|bower_components)/,
loader: ExtractTextPlugin.extract('style-loader', 'css-loader?modules&importLoaders=1&localIdentName=[name]__[local]___[hash:base64:5]!postcss-loader')
}
]
},
plugins: [
new ExtractTextPlugin("styles.css", {allChunks: true})
],
postcss: function() {
return [require("postcss-cssnext")()]
}
}
这是一个 React 组件,我想用随附的 CSS 文件设置样式:
import React = require('react');
import styles = require('../../../css/tree.css')
class Tree extends React.Component<{}, TreeState> {
...
render() {
var components = this.state.components
return (
<div>
<h3 className={styles.h3} >Components</h3>
<div id="tree" className="list-group">
...
</div>
</div>
)
}
}
export = Tree
tree.css
.h3{
color: red;
}
无论我在做什么(尝试更改导入语法,尝试为 ts-loader 声明“要求”,描述为 here,我总是得到:
未捕获的错误:找不到模块“../../../css/tree.css”
在运行时和
错误 TS2307:找不到模块“../../../css/tree.css”。
由 TS 编译器。发生了什么?在我看来,css-loader 甚至没有发出 ICSS?还是 ts-loader 的行为不对?
【问题讨论】:
-
import someName = require('/some/path')是两种不同的无效 ;-) - 您使用的是import还是require? -
什么意思?那是有效的打字稿语法。 @SeanVieira
-
是的,TypeScript 采用了自己的模块语法,而 ES6 模块仍在开发中。它是 CJS 和 ES6 之间的混合体,您可以使用
import(如 ES6)但也使用require(如 CJS)。 TypeScript 也(现在)支持完整的 ES6 语法。
标签: javascript reactjs typescript webpack react-css-modules