2017-03-03 13 views
0

webpack 2に移行しようとしていますが、postcss-loaderをautoprefixにできないようです。私はドキュメントを読んでいますが、問題を見つけることができません。誰もこの問題に遭遇しましたか?もしそうなら、あなたは私の問題を解決するのを助けることができますか?webpack 2にpostcssとautoprefixerを追加するとプレフィックスが付きません

webpack.config.js 
 
var path = require('path'); 
 
var webpack = require('webpack'); 
 
var ExtractTextPlugin = require('extract-text-webpack-plugin'); 
 
var HTMLWebpackPlugin = require('html-webpack-plugin'); 
 
var autoprefixer = require('autoprefixer'); 
 

 
// development variables 
 
const DEVELOPMENT = process.env.NODE_ENV === 'development'; 
 
const PRODUCTION = process.env.NODE_ENV === 'production'; 
 

 
// checks if production : development 
 
const entry = PRODUCTION 
 
    ? [ 
 
      './src/index.js' 
 
     ] 
 
    : [ 
 
      './src/index.js', 
 
      'webpack/hot/dev-server', 
 
      'webpack-dev-server/client?http://localhost8080', 
 
    ]; 
 

 
const plugins = PRODUCTION 
 
    ? [ 
 
      new webpack.optimize.UglifyJsPlugin(), 
 
      new ExtratTextPlugin('style-[contenthash:10].css'), 
 
      new HTMLWebpackPlugin({ 
 
       template: 'index-template.html' 
 
      }) 
 
     ] 
 
    : [ 
 
      new webpack.LoaderOptionsPlugin({ options: { postcss: [ autoprefixer(), ] } }), 
 
      new webpack.HotModuleReplacementPlugin(), 
 
     ]; 
 

 
plugins.push(
 
    new webpack.DefinePlugin({ 
 
     DEVELOPMENT: JSON.stringify(DEVELOPMENT), 
 
     PRODUCTION: JSON.stringify(PRODUCTION), 
 
    }) 
 
); 
 

 
// add class name depending on enviroment PROD | DEV 
 
const cssIndentifier = PRODUCTION ? '[hash:base64:10]' : '[path][name]---[local]'; 
 

 
// inject into head in DEV and create CSS file in PROD 
 
const cssLoader = PRODUCTION 
 
    ? ExtractTextPlugin.extract({ 
 
      loader: 'css-loader?minimize&localIdentName=' + cssIndentifier 
 
     }) 
 
    : ['style-loader','css-loader?localIdentName=' + cssIndentifier + ',postcss-loader']; 
 

 
module.exports = { 
 
    devtool: 'source-map', //add source mapping to devtools 
 
    entry: entry, 
 
    plugins: plugins, 
 
    externals: { 
 
     jquery: 'jQuery' //jquery is external and availabe at the global variable jQuery 
 
    }, 
 
    module: { 
 
     rules: [{ 
 
      test: /\.js$/, 
 
      loader:['babel-loader'], 
 
      exclude: /node_modules/ 
 
     }, { 
 
      test: /\.(png|jpg|gif)$/, 
 
      loader:['url-loader?10000&name=images/[hash.12].[ext]'],//use url loader if image is over 10k : use file loader 
 
      exclude: /node_modules/ 
 
     }, { 
 
      test: /\.css$/, 
 
      loaders: cssLoader, 
 
      exclude: /node_modules/ 
 
     }] 
 
    }, 
 
    output: { 
 
     path: path.join(__dirname, 'dist'), 
 
     publicPath: PRODUCTION ? '' : '/dist/', 
 
     filename: PRODUCTION ? 'bundle.[hash:12].min.js' : 'bundle.js' 
 
    } 
 
}; 
 

 

 
package.json 
 
{ 
 
    "name": "starter", 
 
    "version": "1.0.0", 
 
    "description": "starter project using webpack 2", 
 
    "main": "index.js", 
 
    "scripts": { 
 
    "build": "rimraf dist && NODE_ENV=production webpack", 
 
    "dev": "NODE_ENV=development webpack-dev-server" 
 
    }, 
 
    "repository": "https://github.com/rafh/starter-project.git", 
 
    "author": "Rafael Heard [email protected]", 
 
    "license": "ISC", 
 
    "dependencies": {}, 
 
    "devDependencies": { 
 
    "autoprefixer": "^6.7.6", 
 
    "babel": "^6.23.0", 
 
    "babel-core": "^6.23.1", 
 
    "babel-loader": "^6.3.2", 
 
    "babel-preset-es2015": "^6.22.0", 
 
    "babel-preset-stage-0": "^6.22.0", 
 
    "css-loader": "^0.26.2", 
 
    "extract-text-webpack-plugin": "^2.0.0", 
 
    "file-loader": "^0.10.1", 
 
    "html-webpack-plugin": "^2.28.0", 
 
    "loader": "^2.1.1", 
 
    "postcss-loader": "^1.3.3", 
 
    "rimraf": "^2.6.1", 
 
    "style-loader": "^0.13.2", 
 
    "url-loader": "^0.5.8", 
 
    "webpack": "^2.2.1", 
 
    "webpack-dev-server": "^2.4.1" 
 
    } 
 
}

答えて

2

あり、あなたのWebPACKの設定を持つ夫婦の問題があり、率直に言って私は1つが問題を引き起こしていることになるかわからないので、私はそれらのすべてを概説し、うまくいけばの一つでしょう問題を解決します。

cssLoader

は、私が言うことができるものから、不適切な配列を定義する - 矢印を誤って、それが配列を分離すべきであるプラス記号と文字列に含まれている:WebPACKの2については

PRODUCTION 
    ? ExtractTextPlugin.extract({ 
      loader: 'css-loader?importLoaders=1&minimize&localIdentName=' + cssIndentifier 
     }) 
    : ['style-loader','css-loader?importLoaders=1&localIdentName=' + cssIndentifier, 'postcss-loader']; 

、適切な構文ローダーを使用するので、同様に、use代わりのloaders/loaderです:を使用した場合

{ 
    test: /\.css$/, 
    use: cssLoader, 
    exclude: /node_modules/ 
} 

postcss-loader?importLoaders=1の使用を示唆していますその後、あなたがcss-loaderのために、あなたの定義にそれを追加する必要がありますので:

PRODUCTION 
    ? ExtractTextPlugin.extract({ 
      loader: 'css-loader?minimize&localIdentName=' + cssIndentifier 
     }) 
    : ['style-loader','css-loader?importLoaders=1&localIdentName=' + cssIndentifier, 'postcss-loader'] 

そして、最後に、optionsはローダーに直接渡す必要があります。 LoaderOptionsPlugin.options.postcssは理想的ではありません(ドキュメントのどこにでもその構文がサポートされているわけではありません)。オプションはローダーを定義するときに渡す必要があります。 cssLoaderの文字列'postcss-loader'をこの動作のオブジェクトに置き換えます。

PRODUCTION 
    ? ExtractTextPlugin.extract({ 
      loader: 'css-loader?minimize&localIdentName=' + cssIndentifier 
     }) 
    : [ 
      'style-loader', 
      'css-loader?importLoaders=1&localIdentName=' + cssIndentifier, 
      { 
       loader: 'postcss-loader', 
       options: { 
        plugins: function() { return [ autoprefixer ] } 
       } 
      } 
     ] 

postcssローダのreadmeはoptions.pluginsが動作する奇数の方法で配列を返す関数でなければならないことを指定します。 return [ autoprefixer ]が機能しない場合は、readmeにreturn [ require('autoprefixer') ]を使用するように指示されているので、試してみてください。

これらのどれがこの問題の原因になるのかよく分かりませんが、webpackの設定でこれらの問題を修正しても、ローダーの問題が修正されたらうれしいです。

1)これはあなたのwebpack.config.jsに追加します:

module.exports = { 
    module: { 
     rules: [ 
      { 
       test: /\.css$/, 
       use: ["style-loader", "css-loader", "postcss-loader"] 
      } 
     ] 
    } 
} 

2)次いでpostcss.config.jsを作成します。

2

は、私は私を助けた同じ問題を持っていました
module.exports = { 
    plugins: [ 
    require('autoprefixer') 
    ] 
} 
関連する問題