webpack2入门(构建简单项目-webpack3的部分特性)

1、创建webpack2_test文件夹,创建package.json文件

npm init 初始化项目

2、安装webpack包
1.全局安装  cnpm install webpack -g  (目前版本是3.8.1)
2.项目安装  cnpm install webpack --save
文件目录
// index.less文件
body{
    background:pink;
    h1{
        color:yellowgreen;
    }
}
// index.es 文件
require('../styles/index.less');
import {data} from './data.es'
import('./async.es').then(function(res){
    res.default();
})
//const data=123;
console.log(data);
console.log(1);
// data.es文件
const m=new Map();
m.set('data','index init')
export const test=function(){
    console.log('test shaking')
}
export const data = m.get('data');

if(false==false){
    console.log('产生')
}
//index.html文件
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <h1>webpack</h1>
</body>
</html>
3、创建webpack.config.js文件

写出导入导出文件,执行webpack命令

const webpack=require('webpack');
const path = require('path');
module.exports={
    entry:{
        'index':'./assets/scripts/index.es'
    },
    output:{
        path:path.join(__dirname,'./assets/'),
        publicPath:'./',//注入到index.html文件后,引入文件会默认加上./目录
        filename:'scripts/[name].bundle.js'
    }
}
4、配置css+es6语法的loader

1、安装css的依赖
cnpm isntall css-loader less less-loader style-loader extract-text-webpack-plugin --save-dev
2、安装es6依赖
cnpm install babel-core babel-loader babel-preset-es2015 babel-preset-stage-0 --save-dev

   module:{
        rules:[{
            test:/\.es$/,
            use:[{
                loader:"babel-loader",
                options:{
                    "presets":[["es2015",{modules:false}],"stage-0"]
                }
            }]
        },{
            test:/\.less$/i,
            use:ExtractTextPlugin.extract({
                fallback:"style-loader",
                use:[{
                    loader:'css-loader'
                },{
                    loader:'less-loader'
                }]
            })
        }]
    },
    plugins:[
        new ExtractTextPlugin('styles/[name].css')
        ]

1.提取css插件:extract-text-webpack-plugin,提取出css后最终生成的css,并放在指定目录下
2.plugins下全部配置插件

5、使用inde.html文件作为模板,并注入css、js,把index.html生成到指定目录下
const HtmlWebpackPlugin=require('html-webpack-plugin');
plugins:[
      new HtmlWebpackPlugin({
            filename:'index.html',
            template:'./index.html',
            inject:true
        })
]
6、提取公共代码
plugins:[
      new webpack.optimize.CommonsChunkPlugin({
            name:'common',
            filename:'scripts/[name].js',
            minChunks:2  //被引用2次以上,提取到common.js文件中
        })
]
7、代码压缩
plugins:[
     new webpack.optimize.UglifyJsPlugin({
            compress:{
                warnings:true
            },
            output:{
                comments:false
            },
            sourceMap:false
        })
]
8、webpack3自带有优良特性(代码编译速度更快)
//以下为使用的webpack自带的功能,在plugins内使用
plugins:[
    new webpack.optimize.CommonsChunkPlugin({
            name:'common',
            filename:'scripts/[name].js',
            minChunks:2  //被引用2次以上,提取到common.js文件中
        }),
        new webpack.optimize.UglifyJsPlugin({
            compress:{
                warnings:true
            },
            output:{
                comments:false
            },
            sourceMap:false
        }),
        new webpack.optimize.ModuleConcatenationPlugin(),
]
8.1、去掉多余代码 (下面8.11和8.21条结合才行)

8.11scripts->data.es 文件中有test方法是多余代码,打包时可去掉

解决:代码要压缩,不压缩还是不能去掉多余代码
压缩:压缩是webpack自带的

8.12、babel模块化多余的代码可干掉

loader:"babel-loader",
options:{
   "presets":[["es2015",{modules:false}],"stage-0"]
}

8.13、scope hoisting webpack3新增的模块,作用域提升,精简代码

new webpack.optimize.ModuleConcatenationPlugin()

8.14、code splitting 代码分割,主要是异步加载js

import('./async.es').then(function(res){
   res.default();
})
//会生成一个0.bundle.js文件的代码,然后通过异步的方式在inde.html文件中加载
9、webpack.config.js文件所有代码
const webpack=require('webpack');
const ExtractTextPlugin=require('extract-text-webpack-plugin');
const HtmlWebpackPlugin=require('html-webpack-plugin');
const path = require('path');
module.exports={
    entry:{
        'index':'./assets/scripts/index.es'
    },
    output:{
        path:path.join(__dirname,'./assets/'),
        publicPath:'./',//注入到index.html文件后,引入文件会默认加上./目录
        filename:'scripts/[name].bundle.js'
    },
    module:{
        rules:[{
            test:/\.es$/,
            use:[{
                loader:"babel-loader",
                options:{
                    "presets":[["es2015",{modules:false}],"stage-0"]
                }
            }]
        },{
            test:/\.less$/i,
            use:ExtractTextPlugin.extract({
                fallback:"style-loader",
                use:[{
                    loader:'css-loader'
                },{
                    loader:'less-loader'
                }]
            })
        }]
    },
    plugins:[
        new ExtractTextPlugin('styles/[name].css'),
        new webpack.optimize.CommonsChunkPlugin({
            name:'common',
            filename:'scripts/[name].js',
            minChunks:2  //被引用2次以上,提取到common.js文件中
        }),
        new webpack.optimize.UglifyJsPlugin({
            compress:{
                warnings:true
            },
            output:{
                comments:false
            },
            sourceMap:false
        }),
        new webpack.optimize.ModuleConcatenationPlugin(),
        new HtmlWebpackPlugin({
            filename:'index.html',
            template:'./index.html',
            inject:true
        })
    ]
}
10、package.json依赖包版本
{
  "name": "webpack2_test",
  "version": "1.0.0",
  "description": "",
  "main": "webpack.config.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "webpack": "^3.8.1"
  },
  "devDependencies": {
    "babel-core": "^6.26.0",
    "babel-loader": "^7.1.2",
    "babel-preset-es2015": "^6.24.1",
    "babel-preset-stage-0": "^6.24.1",
    "css-loader": "^0.28.7",
    "extract-text-webpack-plugin": "^3.0.2",
    "html-webpack-plugin": "^2.30.1",
    "less": "^2.7.3",
    "less-loader": "^4.0.5",
    "style-loader": "^0.19.0"
  }
}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,036评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,046评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,411评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,622评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,661评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,521评论 1 304
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,288评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,200评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,644评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,837评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,953评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,673评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,281评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,889评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,011评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,119评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,901评论 2 355

推荐阅读更多精彩内容