webpack入门教程(二)安装和初始化

第二章:安装和初始化

因为webpack是基于nodejs的,所以我们需要先安装一个nodejs。
已经安装过nodejs的小伙伴可以跳过这一步:

首先我们需要安装nodejs


vuecli是基于webpack的,而webpack又是基于nodejs的。所以我们需要先在电脑上安装nodejs。

你可以到了nodejs的官方下载一个符合你系统的版本——nodejs下载

安装完毕以后,打开命令提示符,如果你找不到,直接搜索cmd。


打开cmd窗口

然后输入


输入-v查看版本

看到版本号,说明安装成功!

接下来全局安装webpack3.8.1!


直接输入

npm -g i webpack@3.8.1

安装完毕查看一下版本号。


查看版本号

现在所有准备工作都准备就绪了,然后我们开始初始化一个webpack项目:

初始化webpack项目


找一个文件夹,打开doc框输入

npm init

你会看到很多需要你输入的东西,不用管,一路回车。


生成包配置json

这一步是生成一个package.json,这个是npm的包管理文件。

然后我的建议是,你把文件改成我这样:

{
  "devDependencies": {
    "babel-core": "^6.26.0",
    "babel-loader": "^7.1.2",
    "babel-plugin-transform-runtime": "^6.23.0",
    "babel-preset-env": "^1.6.1",
    "babel-preset-es2015": "^6.24.1",
    "babel-preset-stage-0": "^6.24.1",
    "babel-runtime": "^6.26.0",
    "autoprefixer": "^7.2.3",
    "css-loader": "^0.28.7",
    "style-loader": "^0.21.0",
    "less-loader": "^4.1.0",
    "url-loader": "^0.6.2",
    "file-loader": "^1.1.6",
    "html-webpack-plugin": "^2.30.1",
    "webpack": "^3.8.1",
    "webpack-dev-server": "^2.9.7",
    "webpack-require-http": "^0.4.3",
    "extract-text-webpack-plugin": "^3.0.2"
  },
  "name": "demo",
  "version": "1.0.0",
  "main": "webpack.js",
  "dependencies": {
    "bootstrap": "^3.3.7",
    "html-loader": "^0.5.5",
    "jquery": "^2.1.1",
    "less": "^3.0.4",
    "less-loader": "^4.1.0",
    "style-loader": "^0.21.0",
    "webpack-dev-server": "^2.11.5"
  },
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "watch": "webpack --watch",
    "dev": "webpack-dev-server"
  },
  "author": "",
  "license": "ISC",
  "description": "",
  "babel": {
    "presets": [
      "es2015",
      "react"
    ]
  }
}

然后输入一遍

npm install

这样我们需要的支持包就全有了。

接下来


新建一个webpack.config.js,这是webpack的配置文件。
像我这样写:

// 引入webpack
const webpack = require('webpack')
// 引入html生成插件
const HtmlWebpackPlugin = require('html-webpack-plugin');
// 引入css压缩插件
const ExtractTextPlugin = require("extract-text-webpack-plugin");
module.exports = {
    // 入口文件,指向app.js
    entry: {
        index: './src/js/index.js',
    },
    // 出口文件
    output: {
        // 项目的路径
        path: __dirname + '/dist',
        // 增加随机数防止缓存
        //filename: 'js/[name].[hash:5].js',
        // 输出的文件的路径
        filename: 'js/[name].js',
        // 为使用热启动后产生的日志文件设定输入路径
        hotUpdateChunkFilename: 'hot/hot-update.js',
        hotUpdateMainFilename: 'hot/hot-update.json'
    },
    externals:[
        // 让webpack可以加载外部http资源 例如螳螂
        require('webpack-require-http')
    ],
    // webpack-dev-server 环境
    devServer: {
        contentBase: './dist',
        hot: true
    },
    module: {
        // loader放在rules这个数组里面
        rules: [
            {
                //把es6转换成es5
                test: /\.js$/,
                exclude: /node_modules/,
                loader: 'babel-loader'
            },
            {
                test: /\.html$/,
                use: {
                    loader: 'html-loader'
                }
            },
            {
                //识别图片
                test: /\.(png|jpg|gif)$/,
                loader: 'url-loader',
                options: {
                    limit: 4096,
                    name: 'image/[name].[ext]'
                }
            },
            {    
                //压缩css
                test: /\.css$/,
                use: ExtractTextPlugin.extract({
                    fallback: "style-loader",
                    publicPath: "../",
                    use: [
                        {
                            loader: 'css-loader',
                            options:{
                                minimize: true //css压缩
                            }
                        }
                    ]
                })
            },
            {
                //识别字体文件
                test: /\.(woff|woff2|ttf|eot|svg)(\?v=[0-9]\.[0-9]\.[0-9])?$/,
                loader: 'file-loader?name=./fonts/[name].[ext]'
            },
        ]
    },
    // 将插件添加到webpack中
    plugins: [
        // 开启多页应用 生成html文件
        new HtmlWebpackPlugin({
            //模板文件是哪个
            template: './src/index.html',
            //选择注入哪个文件
            chunks: ['index'],
            //是否添加hash随机数防止缓存
            //hash: true,
            //开启html压缩
            minify:{
                removeComments:true, //移除HTML中的注释
                collapseWhitespace:true//压缩为一行
            },
            // manual根据chunks的位置手动排序
            chunksSortMode: "manual"
        }),
        // 防止webpack一直弹出警告 加载HMR需要的两个插件
        new webpack.NamedModulesPlugin(),
        new webpack.HotModuleReplacementPlugin(),
        // 解决加载jquery后 jquery不能获得$符控制权的问题
        new webpack.ProvidePlugin({
            $: "jquery",
            jQuery: "jquery"
        }),
        new ExtractTextPlugin("css/styles.css"),
    ]
}

你现在肯定有点懵,这是干什么呢??上来一顿配置,我都不知道干什么呢。

不用着急,我们先把开发环境配置好,当我们开始使用的时候,我们会逐个讲解这些配置用到的地方!

到了这一步,你的项目文件夹下面,应该有node_modules文件夹,一个package.json文件和一个webpack.config.js文件。

好的,

然后你再创建两个文件夹,一个叫src,一个叫dist。

全部完成以后是这样的:

目录结构

保持这样,下一个章节我们会详细讲解项目的目录结构!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,163评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,301评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,089评论 0 352
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,093评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,110评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,079评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,005评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,840评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,278评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,497评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,667评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,394评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,980评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,628评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,649评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,548评论 2 352

推荐阅读更多精彩内容

  • 前言 众所周知目前比较火的工具就是gulp和webpack,但webpack和gulp却有所不同,本人两者的底层研...
    cduyzh阅读 1,368评论 0 13
  • 在现在的前端开发中,前后端分离、模块化开发、版本控制、文件合并与压缩、mock数据等等一些原本后端的思想开始...
    Charlot阅读 5,439评论 1 32
  • webpack 是什么? 本质上,webpack 是一个现代 JavaScript 应用程序的静态模块打包器(mo...
    IT老马阅读 3,316评论 2 27
  • 目录第1章 webpack简介 11.1 webpack是什么? 11.2 官网地址 21.3 为什么使用 web...
    lemonzoey阅读 1,734评论 0 1
  • 1. 新建一个文件夹,命名为 webpack-cli , webpack-cli 就是你的项目名,项目名建议使用小...
    鲁大师666阅读 1,474评论 1 3