全局环境下安装 nodejsjavascript
若是项目没有npm管理,即没有package.json文件
npm init
cnpm install webpack --save -dev
cnpm install style-loader css-loader svg-url-loader url-loader file-loader font-awesome-webpack postcss-webpack --save -dev
style-loader :处理位于页面内的style标签中的csscss
css-loader :处理css文件中的url(这种写法是为了将css与js分开打包,利用插件ExtractTextPlugin)html
{ test: /\.css$/, loader: ExtractTextPlugin.extract({ fallback: "style-loader", use: "css-loader" }) },
{ test: /\.(svg|eot|woff|ttf)\w*/, loader: 'file-loader?outputPath=fonts/&name=[name].[ext]' },
url-loader :java
{ test: /\.(png|jpg|gif)$/, loader: 'url-loader?limit=8192&name=css/images/[name].[ext]' },
{ test: /\.xsl$/, loader: "file-loader?name=[name].[ext]" }
url-loader和file-loader涉及到了4个参数:limit、name、outputPath、publicPath。node
file-loader相关的是name、outputPath和publicPath。下面解释一下这3个参数jquery
加上[path]这个参数后,打包后文件中引用文件的路径也会加上这个相对路径。webpack
outputPath表示输出文件路径前缀。web
好比outputPath=img/,图片被打包时,就会在输出文件夹下新建(若是没有)一个名为img的文件夹,把图片放到里npm
publicPath表示打包文件中引用文件的路径前缀json
若是项目已经被npm管理,即包含package.json文件
- 直接安装全部依赖
cnpm install
引入各类须要的js和css等文件
require('./js/lib/jquery/jquery.js');
require('./js/lib/jquery/jquery-1.9.1.min.js');
require('./js/lib/jquery/jquery.colorbox.js');
require('./js/common/common.js');
require('./js/main.js');
require('./js/carousel.js');
// require('./js/MathJax/MathJax.js?config=TeX-AMS-MML_HTMLorMML');
require('./css/iconfont.css');
require('./css/colorbox.css');
require('./css/by.css');
require('./css/jo-dhh.css');
require('./xslt/jats2html.xsl');
var webpack = require("webpack");
__dirname为当前目录
entry: { index: __dirname + "/index.js", // vendor:['jQuery'], },
output: { path: __dirname + "/dist", //打包后的文件存放的地方 filename: "bundle.js" },
var ExtractTextPlugin = require("extract-text-webpack-plugin");
在module中的loader参数中,对css的处理部分修改成
{ test: /\.css$/, loader: ExtractTextPlugin.extract({ fallback: "style-loader", use: "css-loader" }) },
在plugins中添加css文件打包后的输出路径和文件名
new ExtractTextPlugin("style.css")
说明:这里若是不将参数格式显示设置为fallback,use格式,后面在打包时会报css文件错误
图片有三种处理方式,一种图片是在css中被设置为背景样式,这里能够直接识别并放入目标文件夹;
{ test: /\.(png|jpg|gif)$/, loader: 'file-loader?name=images/[name].[ext]' },
另外一种是在html中经过img标签的src引入,由于webpack对html支持不友好,因此须要借助插件html-webpack-plugin
第三种是借用拷贝插件,直接强行拷贝全部图片,由于本项目图片是在xslt中引用,因此采用第三种和第一种结合的方式处理图片,在plugin参数中添加
new CopyWebpackPlugin([
{
from: 'css/images',
to: 'images'
},
{
from: 'xmlsample',
to: 'xmlsample'
},
{
from: 'js/MathJax',
to: 'MathJax'
}
]),
这里须要注意:字体文件的css样式和其他资源文件的路径对应问题
{ test: /\.(svg|eot|woff|ttf)\w*/, loader: 'file-loader?outputPath=fonts/&name=[name].[ext]' },
{ test: /\.xsl$/, loader: "file-loader?name=[name].[ext]" }
devtool: 'source-map',
var CopyWebpackPlugin = require("copy-webpack-plugin");
new CopyWebpackPlugin([
{
from: 'css/images',
to: 'images'
},
{
from: 'xmlsample',
to: 'xmlsample'
},
{
from: 'js/MathJax',
to: 'MathJax'
}
]),
懒惰才是最大生产力哈哈哈
var CleanWebpackPlugin = require("clean-webpack-plugin");
new CleanWebpackPlugin(
['dist'],
{
root: __dirname, //根目录
verbose: true, //开启在控制台输出信息
dry: false //启用删除文件
})
var webpack = require("webpack");
var ExtractTextPlugin = require("extract-text-webpack-plugin");
var CopyWebpackPlugin = require("copy-webpack-plugin");
var CleanWebpackPlugin = require("clean-webpack-plugin");
module.exports = {
entry: {
index: __dirname + "/index.js",
// vendor:['jQuery'],
},
output: {
path: __dirname + "/dist",
//打包后的文件存放的地方
filename: "bundle.js"
},
module: {
loaders: [
{
test: /\.css$/,
loader: ExtractTextPlugin.extract({
fallback: "style-loader",
use: "css-loader"
})
},
// [hash:8]
// {
// test: /\.(png|jpg|gif)$/,
// loader: 'url-loader?limit=8192&name=css/images/[name].[ext]'
// },
{
test: /\.(png|jpg|gif)$/,
loader: 'file-loader?name=images/[name].[ext]'
},
{
test: /\.(svg|eot|woff|ttf)\w*/,
loader: 'file-loader?outputPath=fonts/&name=[name].[ext]'
},
{
test: /\.xsl$/,
loader: "file-loader?name=[name].[ext]"
}
]
},
devtool: 'source-map',
plugins: [
new ExtractTextPlugin("style.css"),
// new webpack.optimize.CommonsChunkPlugin({
// names: ['vendor', 'manifest'],
// }),
new CopyWebpackPlugin([
{
from: 'css/images',
to: 'images'
},
{
from: 'xmlsample',
to: 'xmlsample'
},
{
from: 'js/MathJax',
to: 'MathJax'
}
]),
new CleanWebpackPlugin(
['dist'],
{
root: __dirname, //根目录
verbose: true, //开启在控制台输出信息
dry: false //启用删除文件
})
]
}