-
多语言的实现了,现在安装我们一般所需要的插件
1.sass、scss、less编译
因为sass-loader依赖于node-sass,所以还要安装node-sass
当然了,使用样式的话,css-loader和style-loader也是必须的依赖包
- css-loader使你能够使用类似@import 和 url(…)的方法实现 require()的功能;
- style-loader将所有的计算后的样式加入页面中;
二者组合在一起使你能够把样式表嵌入webpack打包后的JS文件中。
npm install --save-dev less
npm install --save-dev less-loader
npm install --save-dev sass
npm install --save-dev sass-loader
npm install --save-dev node-sass
npm install --save-dev css-loader
npm install --save-dev style-loader
npm install --save-dev extract-text-webpack-plugin
npm install --save-dev postcss-loader
npm install --save-dev precss
npm install --save-dev autoprefixer
- 自动补全css3前缀:autoprefixer
实际代码
a { display: flex}
插件补全之后
a {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex
}
npm install --save-dev autoprefixer postcss-loader
var autoprefixer = require('autoprefixer');
module.exports={
//其他配置这里就不写了
module:{
loaders:[
{ test:/\.css$/, loaders:['style-loader','css-loader','postcss-loader'] }
]
},
postcss:[autoprefixer({browsers:['last 2 versions']})]
}
- 自动生成html插件:html-webpack-plugin
npm install html-webpack-plugin --save-dev
/webpack.config.js
var HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports={
entry:'./index.js',
output:{ path:__dirname+'/dist', filename:'bundle.js' }
plugins: [
new HtmlWebpackPlugin({
title: 'My App',
filename: 'admin.html',
template:'header.html',
inject: 'body',
favicon:'./images/favico.ico',
minify:true,
hash:true,
cache:false,
showErrors:false,
"chunks": {
"head": {
"entry": "assets/head_bundle.js",
"css": [ "main.css" ]
},
xhtml:false
})
]
}
title: 设置title的名字
filename: 设置这个html的文件名
template:要使用的模块的路径
inject: 把模板注入到哪个标签后 'body',
favicon: 给html添加一个favicon './images/favico.ico',
minify:是否压缩 {...} | false (最新api变动,原来是ture|false 感谢@onmi指正)
hash:是否hash化 true false ,
cache:是否缓存,
showErrors:是否显示错误,
chunks:目前没太明白
xhtml:是否自动毕业标签 默认false
- 提取样式插件:extract-text-webpack-plugin
说明:将css放到index.html的body上面
var ExtractTextPlugin = require("extract-text-webpack-plugin");
module.exports = {
module: {
loaders: [
{ test: /\.css$/, loader: ExtractTextPlugin.extract("style-loader", "css-loader") }
]
},
plugins: [
new HtmlWebpackPlugin({ template: './src/public/index.html', inject: 'body' }),
new ExtractTextPlugin("[name].[hash].css")
]
}
- 拷贝资源插件:copy-webpack-plugin
cnpm install --save-dev copy-webpack-plugin
new CopyWebpackPlugin([{
from: __dirname + '/src/public'
}]),
作用:把public 里面的内容全部拷贝到编译目录
| 参数 | 作用 |其他说明 |
| ------------- |-------------|-------------|
| from |定义要拷贝的源目录|from: __dirname + '/src/public'|
|to |定义要烤盘膛的目标目录 |from: __dirname + '/dist' |
|toType | file 或者 dir|可选,默认是文件 |
|force |强制覆盖先前的插件 | 可选 默认false|
| context|不知道作用 | 可选 默认 base context 可用 specific context|
| flatten| 只拷贝文件不管文件夹| 默认是false|
|ignore | 忽略拷贝指定的文件|可以用模糊匹配 |
- 全局挂载插件:webpack.ProvidePlugin [webpack内置插件 ]
new webpack.ProvidePlugin({ $: "jquery", jQuery: "jquery", "window.jQuery": "jquery"}))
new webpack.NoErrorsPlugin(),
new webpack.optimize.DedupePlugin(),
new webpack.optimize.UglifyJsPlugin(),
new webpack.optimize.CommonsChunkPlugin('common.js')
作用,和上面5个一一对应
当模块使用这些变量的时候,wepback会自动加载。(区别于window挂载,感谢@lihuanghe121指正)
不显示错误插件
查找相等或近似的模块,避免在最终生成的文件中出现重复的模块
丑化js 混淆代码而用
提取公共代码的插件
调试技巧
if (isTest) { config.devtool = 'inline-source-map';}
作用: 使用source-map可以在debug的时候看到源代码,方便 查错
这里我还没想好怎么整理,比较混乱
用sass编写的样式也打包 转换成css 的时候也是单独的一个css 文件
npm install --save-dev extract-text-webpack-plugin
npm install --save-dev sass-loader
var ExtractTextPlugin = require('extract-text-webpack-plugin');
编写loaders:{ test: /.sass$/, loader: ExtractTextPlugin.extract('style', 'css!sass')}
第二个参数执行顺序:从右到左
npm install css-loader --save-dev
npm install less-loader --save-dev
npm install sass-loader --save-dev
npm install style-loader --save-dev
npm install url-loader --save-dev
一个完整的栗子
'use strict';
// Modules
var webpack = require('webpack');
var autoprefixer = require('autoprefixer');
var HtmlWebpackPlugin = require('html-webpack-plugin');
var ExtractTextPlugin = require('extract-text-webpack-plugin');
var CopyWebpackPlugin = require('copy-webpack-plugin');
/**
* Env
* Get npm lifecycle event to identify the environment
*/
var ENV = process.env.npm_lifecycle_event;
var isTest = ENV === 'test' || ENV === 'test-watch';
var isProd = ENV === 'build';
module.exports = function makeWebpackConfig() {
var config = {};
config.entry = isTest ? {} : {
app: './src/app/app.js'
};
config.output = isTest ? {} : {
// Absolute output directory
path: __dirname + '/dist',
publicPath: isProd ? '/' : 'http://localhost:8080/',
filename: isProd ? '[name].[hash].js' : '[name].bundle.js',
chunkFilename: isProd ? '[name].[hash].js' : '[name].bundle.js'
};
if (isTest) {
config.devtool = 'inline-source-map';
} else if (isProd) {
config.devtool = 'source-map';
} else {
config.devtool = 'eval-source-map';
}
config.module = {
preLoaders: [],
loaders: [{
test: /\.js$/,
loader: 'babel',
exclude: /node_modules/
}, {
test: /\.css/,
loader: isTest ? 'null' : ExtractTextPlugin.extract('style', 'css?sourceMap!postcss')
}, {
test: /\.(png|jpg|jpeg|gif|svg|woff|woff2|ttf|eot)$/,
loader: 'file'
}, {
test: /\.json$/,
loader: 'json'
}, {
test: /\.scss/,
loader: 'style!css!sass'
}, {
test: /\.html$/,
loader: 'raw'
}]
};
if (isTest) {
config.module.preLoaders.push({
test: /\.js$/,
exclude: [
/node_modules/,
/\.spec\.js$/
],
loader: 'isparta-instrumenter'
})
}
config.postcss = [
autoprefixer({
browsers: ['last 2 version']
})
];
config.plugins = [];
if (!isTest) {
config.plugins.push(
new HtmlWebpackPlugin({
template: './src/public/index.html',
inject: 'body'
}),
new ExtractTextPlugin('[name].[hash].css', {disable: !isProd})
)
}
if (isProd) {
config.plugins.push(
new webpack.NoErrorsPlugin(),
new webpack.optimize.DedupePlugin(),
new webpack.optimize.UglifyJsPlugin(),
new CopyWebpackPlugin([{
from: __dirname + '/src/public'
}]),
new webpack.ProvidePlugin({
$: "jquery",
jQuery: "jquery",
"window.jQuery": "jquery"
}))
}
config.devServer = {
contentBase: './src/public',
stats: 'minimal'
};
return config;
}();
-
5.webpack.config.js配置文件
var path = require('path');
module.exports = {
entry: path.resolve(__dirname, './wap/main.js'),
output: {
path: path.resolve(__dirname, './build'),
filename: 'bundle.js'
},
module: {
loaders: [{
test: /\.jsx?$/,
loader: 'babel'
}, {
test: /\.css$/,
loader: 'style!css'
}, {
test: /\.less$/,
loader: 'style!css!less'
}, {
test: /\.scss$/,
loader: 'style!css!sass'
},{
test: /\.(png|jpg)$/,
loader: 'url?limit=25000'
}]
}
};
网友评论