npm install --save-dev less less-loader
css
{ test: /\.less$/, use: [{ loader: "style-loader" // creates style nodes from JS strings }, { loader: "css-loader" // translates CSS into CommonJS , { loader: "less-loader" // compiles Less to CSS }] }
分离html
{ test: /\.less$/, use: extractTextPlugin.extract({ use: [{ loader: "css-loader" }, { loader: "less-loader" }], // use style-loader in development fallback: "style-loader" }) }
sass与less相同
npm install --save-dev sass-loader node-sass
node
npm install --save-dev postcss-loader autoprefixer
react
postcss须要单独配置configjquery
postcss.config.js 与 webpack.config.js 同级webpack
module.exports = { plugins: [ require('autoprefixer') ] }
配置loadercss3
{ test: /\.css$/, use: [ { loader: "style-loader" }, { loader: "css-loader", options: { modules: true } }, { loader: "postcss-loader" } ] }
分离csses6
{ test: /\.css$/, use: extractTextPlugin.extract({ fallback: 'style-loader', use: [ { loader: 'css-loader', options: { importLoaders: 1 } }, 'postcss-loader' ] }) }
npmn i -D purifycss-webpack purify-css
PurifyCSS-webpack要以来于purify-css这个包,因此这两个都须要安装web
由于咱们须要同步检查html模板,因此咱们须要引入node的glob对象使用。在webpack.config.js文件头部引入glob。npm
const glob =
require('glob');
const PurifyCSSPlugin =
require("purifycss-webpack");
new PurifyCSSPlugin({ // Give paths to parse for rules. These should be absolute! paths: glob.sync(path.join(__dirname, 'src/*.html')), })
npm i babel-core babel-loader babel-preset-env babel-preset-stage-0 babel-preset-react -D
{ test:/\.jsx?$/, use: { loader: 'babel-loader', options: { presets: ["env","stage-0","react"]// env --> es6, stage-0 --> es7, react --> react } }, include:path.join(__dirname,'./src'), exclude:/node_modules/ }
配置devtool
module.exports = { devtool: 'eval-source-map', entry: __dirname + "/app/main.js", output: { path: __dirname + "/public", filename: "bundle.js" } }
能够直接在entry中引入
import $ from jquery
利用插件引入
const webpack = require('webpack')
new webpack.ProvidePlugin({ $:"jquery" })
npm install copy-webpack-plugin -D
const CopyWebpackPlugin = require('copy-webpack-plugin'); plugins: [ new CopyWebpackPlugin([{ from: path.join(__dirname, 'public'), // 从哪里复制 to: path.join(__dirname, 'dist', 'public') // 复制到哪里 }]) ]
npm install clean-webpack-plugin -D
const CleanWebpackPlugin = require('clean-webpack-plugin'); plugins: [ new CleanWebpackPlugin([path.join(__dirname, 'dist')]) ]
watch: true, watchOptions: { ignored: /node_modules/, //忽略不用监听变动的目录 aggregateTimeout: 500, // 文件发生改变后多长时间后再从新编译(Add a delay before rebuilding once the first file changed ) poll:1000 //每秒询问的文件变动的次数 }
//请求到 /api/users 如今会被代理到请求 http://localhost:9000/api/users。 proxy: { "/api": "http://localhost:9000", }
指定extension以后能够不用在require或是import的时候加文件扩展名,会依次尝试添加扩展名进行匹配
resolve: { //自动补全后缀,注意第一个必须是空字符串,后缀必定以点开头 extensions: ["",".js",".css",".json"], },
配置别名能够加快webpack查找模块的速度
const bootstrap = path.join(__dirname,'node_modules/bootstrap/dist/css/bootstrap.css'); resolve: { alias: { 'bootstrap': bootstrap } }
// 多个入口,能够给每一个入口添加html模板 entry: { index: './src/index.js', main:'./src/main.js' }, output: { path: path.resolve(__dirname, 'dist'), filename: '[name].[hash].js', publicPath:PUBLIC_PATH }, plugins: [ new HtmlWebpackPlugin({ minify: { removeAttributeQuotes:true }, hash: true, template: './src/index.html', chunks:['index'], filename:'index.html' }), new HtmlWebpackPlugin({ minify: { removeAttributeQuotes:true }, hash: true, chunks:['login'], template: './src/login.html', filename:'login.html' })] ]