Skip to content

webpack loaders

Published: at 12:00 AM


some ways of configuring loaders。
可以参考https://forum.shakacode.com/t/understanding-the-webpack-module-bundler/336

    module: {
        preLoaders: [   //执行顺序在loaders之前。
          { test: /\.ts$/, loader: 'tslint-loader', exclude: [ /node_modules/ ] },
          //TypeScript的loader,angular官方用的就是typescript,
          //这里用tslint-loader预处理,下面loaders中有awesome-typescript-loader。
          { test: /\.js$/, loader: "source-map-loader", exclude: [ /node_modules\/rxjs/ ] }
        ],
        loaders: [
          {
            test: /\.jsx?$/,
            loaders: ['babel?cacheDirectory'],
            //把react的jsx文件编译为js文件,缓存目录。
            include: PATHS.app
            //编译这个路径下的所有jsx文件,这里PATHS.app是路径变量。
          },
          {
           test: /\.js$|\.jsx$/,
           loader: 'babel',
           //loader里的query既可以放在query键值中,也可以直接放在babel?后,以&分隔。
            query: {
              "presets": ["es2015", "react", "stage-0","react-hmre"],
              //其中es2015表示支持es6转化为es2015。
              "plugins":["transform-decorators-legacy"]
            },
            include: path.join(__dirname, '../src'),
            exclude: /node_modules/      //表示node_modules目录下的jsx文件不需要转化。
          },
          {
            test: /\.less$/,
            loader: 'style!css?modules&importLoaders=2&sourceMap&localIdentName=[local]___
            [hash:base64:5]!autoprefixer?browsers=last 2 version!less?outputStyle=expanded&sourceMap'
          },
          {
            test: /\.scss$/,
            loader: 'style!css?modules&importLoaders=2&sourceMap&localIdentName=[local]___
            [hash:base64:5]!autoprefixer?browsers=last 2 version!sass?outputStyle=expanded&sourceMap'
            //注意“!”用来分隔各个loaders,查询参数的格式等同于,http get后的“? & =”,
            //尤其在上面这种链式loaders中有用,链式执行loaders的顺序是从右至左,先引入scss
            //文件,用sass loader处理,sourceMap表示编译后也能查看源文件,这里尤其要注意,sourceMap需要与moduls和LocalIdentName搭配使用,否则会报无法找到源文件的错误。(血泪教训啊)需要chrome开
            //启sourcemap选项,输出文件格式不是压缩的。处理后的结果传递给antoprefixer-loader
            //,但是只支持主流浏览器的最近的两个版本。再通过css-loader处理,文件名字hash处理。
            //最后经过style-loader。
          },
          {
            test: /\.css$/,
            loader: ExtractTextPlugin.extract('style', 'css'),
            include: PATHS.app
          },
          { test: /\.ts$/, loader: 'awesome-typescript-loader', exclude: [ /\.(spec|e2e)\.ts$/     ]
            //这里排除了.spec,.e2e等测试文件的编译。
          },
          { test: /\.json$/, loader: "json-loader" },
          {
            test: /\.css$/, loader: ExtractTextPlugin.extract('style-loader', 'css-loader?sourceMap' )
          },
          {
            test: /\.(jpe?g|png|gif)$/i,
            loaders: [
              'url?limit=10000&name=images/[hash:8].[name].[ext]',
              'image-webpack?{progressive:true, optimizationLevel: 7, interlaced: false, pngquant:{quality: "65-90", speed: 4}}'
            ]
          },
          {
            test: /\.(woff|woff2|ttf|eot|svg)(\?v=[0-9]\.[0-9]\.[0-9])?$/, loader: 'url?limit=10000&name=fonts/[hash:8].[name].[ext]'
          },
          { test: /\.html$/, loader: 'raw'}
        ],

      }