webpack入门系列2

摘要:
前面介绍了使用webpack做最基础的打包,接下来讲讲webpack的进阶。

前面介绍了使用webpack做最基础的打包,接下来讲讲webpack的进阶。

1、使用 webpack 构建本地服务器:

想不想让你的浏览器监听你的代码的修改,并自动刷新显示修改后的结果,其实Webpack提供一个可选的本地开发服务器,这个本地服务器基于node.js构建,可以实现你想要的这些功能,不过它是一个单独的组件,在webpack中进行配置之前需要单独安装它作为项目依赖

npm install --save-dev webpack-dev-server -g

devServer作为webpack配置选项中的一项,以下是它的一些配置选项,更多配置可以参考这里

devserver的配置选项 功能描述
contentBase

默认webpack-dev-server会为根文件夹提供本地服务器,

如果想为另外一个目录下的文件提供本地服务器,应该在这里设置其所在目录(本例设置到“public"目录)

port设置默认监听端口,如果省略,默认为”8080“
inline设置为true,当源文件改变时会自动刷新页面
historyApiFallback在开发单页应用时非常有用,它依赖于HTML5 history API,如果设置为true,所有的跳转将指向index.html

把这些命令加到webpack的配置文件中,现在的配置文件webpack.config.js如下所示:  

module.exports = {
    entry: __dirname + "/app/main.js", //已多次提及的唯一入口文件
    output: {
        path: __dirname + "/public", //打包后的文件存放的地方
        filename: "bundle.js" //打包后输出文件的文件名
    },
    devServer: {
        contentBase: "./public", //本地服务器所加载的页面所在的目录
        historyApiFallback: true, //不跳转
        inline: true //实时刷新
    }
}

package.json中的scripts对象中添加如下命令,用以开启本地服务器:

"scripts": {
    "test": "echo "Error: no test specified" && exit 1",
    "start": "webpack"
  }

在终端中输入npm run server即可在本地的8080端口查看结果

webpack入门系列2第1张

2、Loaders

接着就是大名鼎鼎的Loaders了! 

  Loaderswebpack提供的最激动人心的功能之一了。通过使用不同的loaderwebpack有能力调用外部的脚本或工具,实现对不同格式的文件的处理,比如说分析转换sasscss,或者把下一代的JS文件(ES6,ES7)转换为现代浏览器兼容的JS文件,对React的开发而言,合适的Loaders可以把React的中用到的JSX文件转换为JS文件。所以如果我们需要在应用中添加 css 文件,就需要使用到 css-loaderstyle-loader,他们做两件不同的事情,css-loader 会遍历 CSS 文件,然后找到 url() 表达式然后处理他们,style-loader 会把原来的 CSS 代码插入页面中的一个 style 标签中。
接下来我们使用以下命令来安装 css-loader 和 style-loader(全局安装需要参数 -g)。
cnpm install css-loader style-loader

执行以上命令后,会在node_modules 目录安装css-loaderstyle-loader

接下来在app目录下新建一个css 文件,代码如下:

body{
  background-color: green;  
}
  修改main.js文件,代码如下:
//main.js 
require("!style-loader!css-loader!./style.css");
const greeter = require('./Greeter.js');
document.querySelector("#root").appendChild(greeter());

接下来我们使用 webpack 命令来打包:

webpack app/main.js -o public/bundle.js
或者之前配置 start 可以使用:
npm start

注:之前css-loader和style-loader若是全局安转,在打包时可能会报错,这俩个依赖无法找到。这时可以使用以下代码解决:

npm link css-loader
npm link style-loader

在浏览器访问,输出结果如下所示: 

webpack入门系列2第2张

require CSS 文件的时候都要写 loader 前缀!style-loader!css-loader!,当然我们可以根据模块类型(扩展名)来自动绑定需要的 loader。 将 main.js中的require("!style-loader!css-loader!./style.css")修改为require("./style.css")

//main.js 
require("./style.css");
const greeter = require('./Greeter.js');
document.querySelector("#root").appendChild(greeter());

然后执行: 

webpack app/main.js -o public/bundle.js --module-bind "css=style-loader!css-loader"

在浏览器中访问,效果同上种。

3、配置文件

我们可以将一些编译选项放在配置文件中(webpack.config.js),以便于统一管理: 

module.exports = {
    entry: "./runoob1.js",
    output: {
        path: __dirname,
        filename: "bundle.js"
    },
    module: {    //新增配置文件                        
        rules: [
            { test: /.css$/, loader: "style-loader!css-loader" }
        ]
    },
devServer: {
contentBase: "./public",  
historyApiFallback: true,
inline: true
}
};

4、插件

插件在 webpack 的配置信息 plugins 选项中指定,用于完成一些 loader 不能完成的工。

webpack 自带一些插件,你可以通过 cnpm 安装一些插件。

使用内置插件需要通过以下命令来安装:

cnpm install webpack --save-dev

比如我们可以安装内置的 BannerPlugin 插件,用于在文件头部输出一些注释信息。修改 webpack.config.js,代码如下:

var webpack = require('webpack');
module.exports = {
    entry: __dirname + "/app/main.js", //已多次提及的唯一入口文件
    output: {
        path: __dirname + "/public", //打包后的文件存放的地方
        filename: "bundle.js" //打包后输出文件的文件名
    },
    devServer: {
        contentBase: "./public", //本地服务器所加载的页面所在的目录
        historyApiFallback: true, //不跳转
        inline: true //实时刷新
    },
    module: { //新增配置文件
        rules: [
            { test: /.css$/, loader: "style-loader!css-loader" }
        ]
    },
    plugins: [ //用于输出注释信息   
        new webpack.BannerPlugin('注释:编译后文件!')
    ]
}

然后运行吗,打开bundle.js,可以看到文件头部出现了我们指定的注释信息。

免责声明:文章转载自《webpack入门系列2》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇【转】70个经典的 Shell 脚本面试问题php发送get、post请求的几种方法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

第一节:Webpack简介、安装-配置-打包、常用loader的使用(css/style/less/postcss-loader)

一. 简介 1. Webpack背景  (1). 事实上随着前端的快速发展,目前前端的开发已经变的越来越复杂了:  A. 比如开发过程中我们需要通过模块化的方式来开发;  B. 比如也会使用一些高级的特性来加快我们的开发效率或者安全性,比如通过ES6+、TypeScript开发脚本逻辑, 通过sass、less等方式来编写css样式代码;  C. 比如开发...

纯CSS3魔方的制作

  <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> <style type="text/css"> *{ margin:0; padding:0; } html,bo...

巧用CSS属性visibility与opacity代替鼠标经过的jQuery事件

一直使用jQuery的hover()函数来写鼠标经过事件,这几天发现其他同行直接使用CSS就搞定了。自己在线下也试了试: 当然也并不是没有前提条件,需要配合一些定位属性来使用(position/top/left)。代码如下: <!DOCTYPE html> <html lang="en"> <head> <...

css自定义滚动条样式

/*定义滚动条高宽及背景 高宽分别对应横竖滚动条的尺寸*/ ::-webkit-scrollbar { width: 16px; /*滚动条宽度*/ height: 16px; /*滚动条高度*/ } /*定义滚动条轨道 内阴影+圆角*/ ::-webkit-scrollbar-track...

常用css3属性的ie兼容查看

记录一下关于css3的各种常用属性对ie各版本浏览器的兼容程度; 最低可兼容ie7 最低可兼容ie8 最低可兼容ie9 最低可兼容ie10 position:fixed clip E:first-letter E::first-letter E:first-line E::first-line box-sizing E:after/E::af...

#学习分享#开发基础知识之前端测试(一)

前言:本文用于2018/1/30晚内部分享。主题:前端单元测试 正文: 一、思考 我的目标是,如何浅入本次的主题,让愿意接收陌生信号的“对象”快速简单的get到信号,并且对本次分享产生一个小兴趣。 二、What     本章节主要讲述前端单元测试做什么,vue单元测试做什么。   (1) 基础概念 测试的概念:测试是检测你的应用代码(也叫“生产代码”)...