webpack

2019-11-19  本文已影响0人  我不傻_cyy

webpack的运行需要依赖node.js的运行环境。
安装webpack
cnpm install -g webpack@1.13.2
在project目录下创建a.js文件

document.write("hello webpack");

在项目目录下运行命令,会将a.js打包到bundle.js文件中

webpack a.js bundle.js

创建index.html,运行使用bundle.js文件

<html>
    <head>
          <script src="bundle.js"></script>
    </head>
</html>

上面的例子中使用的是命令行的方式进行打包。
也可以通过配置文件的方式进行打包
例如:
文件webpack.config.js

module.exports = {
    entry:'./a.js',
    output:{
        filename:'bundle.js'
    }
};

在命令行中直接运行webpack命令就可以了。因为参数已经放在了webpack.config.js文件中。
webpack-dev-server:前面的例子是直接通过浏览器打开index.html页面,这种情况与实际的项目是有区别的,因为实际的项目通常会是在一个服务器上打开index.html,那么webpack-dev-server就是一个微服务器,运行它就是启动了一个web服务器,可以很方便的从服务器上打开这个index.html。
安装webpack-dev-server
cnpm install -g webpack-dev-server@1.15.0
运行webpack-dev-server
webpack-dev-server --open 就会自动打开与http协议关联的服务器,并显示默认的index.html页面。
会显示如下地址的访问:
http://localhost:8080/webpack-dev-server/
默认访问你的是8080端口,如果这个端口被占用了,那么可以自定义其他端口。
修改webpack.config.js如下:

module.exports = {
    entry:'./a.js',
    output:{
        filename:'bundle.js'
    },
    devServer:{
        port:8088
    }
};

webpack-dev-server支持热更新,所谓的热更新,即在webpack.config.js中的entry文件(a.js)发生了改变之后,会自动运行webpack,并自动刷新页面,可以立即看到修改后的结果。
在webpack.config.js文件中导入webpack模块
即:

var webpack = require('webpack')
注意:
因为webpack模块是全局模块,在一些情况下,通过上面的方式导入不能够被识别,需要进行一次链接,即:npm link webpack

重新启动webpack-dev-server --open ,随便修改一下a.js文件,会看到不需要刷新html页面,自动更新的效果。(没有实验成功)
热更新是基于entry入口的文件。所以也可以见识html和css的更新。
虽然前面提到的是使用webpack-dev-server的方式,但是大多数的项目都会通关过npm的方式运行。
进行package.json文件的初始化
npm init -y -y表示所有操作都同意
修改package.json文件

{
  "name": "webpack-demo",
  "version": "1.0.0",
  "description": "",
  "main": "a.js",
  "scripts":{
    "dev":"webpack-dev-server"
  },
  "dependencies": {
    "webpack": "^1.13.2"
  },
  "devDependencies": {},
  "scripts": {
    "dev":"webpack-dev-server"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

运行npm run dev
测试:在浏览器中输入地址http://localhost:8088/

webpack多个入口文件

新增b.js文件:

document.write("hello webpack from b.js");

修改webpack.config.js文件如下:

var webpack = require('webpack')
module.exports = {
    entry: {
        bundle1:'./a.js',
        bundle2:'./b.js'
    },
    output: {
        filename: '[name].js'
    },
    plugins:[
        new webpack.HotModuleReplacementPlugin()
    ],
    devServer: {
        port:8088,
        inline:true,
        hot:true
    }
}

修改index.html文件:

<html>
    <head>
          <script src="bundle1.js"></script>
      <script src="bundle2.js"></script>
    </head>
</html>

运行npm run dev
浏览器中输入http://localhost:8088/webpack-dev-server/

ES6的全称为ECMAScript 6.0,是下一代javaScript语言的标准。

因为ES6标准推出的时间还不够久,所以并不是所有的浏览器都支持ES6的运行,因此需要把ES6的javaScript代码,转码成ES5的标准代码,以便能够在当下的浏览器中兼容运行。
转码工具有很多种,babel就是其中一种。
安装babel
运行如下的安装命令:

npm install --save-dev babel-loader@6.2.7 babel-core@6.18.0 babel-preset-latest@6.24.1

在a.js中写入:

const name = 'ES6'
document.write(`hello ${name}`)

修改webpack.config.js文件如下:

var webpack = require('webpack')
module.exports = {
    entry: './a.js',
    output: {
        filename: 'bundle.js'
    },
    module:{
        loaders:[
            {
                test:/\.js$/,            //表示仅仅转换.js文件
                loader:'babel',          //使用babel进行转换
                query:{
                    presets:['latest']   //表示使用最新的语法规则进行
                }
            }
        ]
    },
    devServer: {
        port:8088
    }
}

修改index.html文件如下:

<html>
    <head>
          <script src="bundle.js"></script>
    </head>
</html>

运行webpack命令进行打包:
可以看到bundle.js文件中将

const name = 'ES6'
document.write(`hello ${name}`)
转码为:
/***/ function(module, exports) {

    'use strict';

    var name = 'ES6';
    document.write('hello ' + name);

/***/ }
/******/ ]);

运行npm run dev命令
在浏览器中输入http://localhost:8088/webpack-dev-server/

CSS模块

在webpack中所有文件都是模块,所以一个css文件也是模块
可以使用css-loader和style-loader将css文件作为一个模块打包到bundle.js文件中。
安装css-loader和style-loader
npm install style-loader@0.13.1 css-loader@0.25.0 --save-dev
准备style.css文件

body{
  background-color:blue;
}

修改package.config.js,增加style-loader和css-loader.要使css起作用,需要同时使用这两个loader

var webpack = require('webpack')
module.exports = {
    entry: './a.js',
    output: {
        filename: 'bundle.js'
    },
    module:{
        loaders:[
            {
                test:/\.js$/,            //表示仅仅转换.js文件
                loader:'babel',          //使用babel进行转换
                query:{
                    presets:['latest']   //表示使用最新的语法规则进行
                }
            },
            {
                test:/\.css/,
                loader:'style-loader!css-loader'
            }
        ]
    },
    devServer: {
        port:8088
    }
}

修改a.js文件,将style.css文件当作一个模块加进去

require('./style.css')
const name = 'ES6'
document.write(`hello ${name}`)

运行npm run dev可以在浏览器中看到背景变成了蓝色。

上一篇 下一篇

猜你喜欢

热点阅读