博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
webpack入门及使用
阅读量:4706 次
发布时间:2019-06-10

本文共 4004 字,大约阅读时间需要 13 分钟。

webpack

模块打包机:分析你的项目结构,找到其中的javaScript模块以及一些其他不能直接被浏览器运行的拓展语言(Scss、TypeScipt)并将其转换和打包为适合浏览器运行的格式。

  • 安装

webpack4之后webpack-cli被抽离出来了,需要单独安装。如果没有安装运行的时候会提示One CLI for webpack must be installed.

$ npm install -g webpack$ npm install -g webpack-cli
  • npm配置文件

创建npm配置文件package.json

$ npm init -y
  • 安装webpack依赖包
$ npm install webpack --save-dev
  • 目录结构
├── app│   ├── mian.js│   └── Greeter.js└── public    ├── index.html    └── bundle.js(webpack打包后生成)
  • 创建基础的index.html

index.html:

      
//bundle.js为webpack打包后生成的文件
  • 我们再创建一个模块Greeter(根据CommonJS规范命名一个模块)

Greeter.js:

module.exports = function() {  var greet = document.createElement('div');  greet.textContent = "Hello World!";  return greet;};

main.js加载模块

main.js:

const greeter = require('./Greeter.js');document.body.appendChild(greeter());
  • 运行webpack
// webpack {
{入口文件路径}} -o {
{打包后文件存放路径}} $ webpack app/main.js -o public/bundle.js --mode development

1487780-20181211155644850-760088664.png

打开index.html

1487780-20181211155655776-724972930.png

通过配置文件使用webpack

webpack除了上述的打包功能还有很多高级的功能,如果仅仅通过命令行的形式,不但不方便而且容易出错。

  • 我们在根目录创建一个配置文件webpack.config.js

"__dirname"是node.js中的一个全局变量,它指向脚本执行的当前路径。

webpack.config.js:

module.exports = {  // 入口文件路径  entry:  __dirname + "/app/main.js",  // 打包后的输出  output: {    // 输出路径    path: __dirname + "/public",    // 输出文件名    filename: "bundle.js"  }}
  • package.json中添加mode配置

development:开发者模式侧重功能调试 production:发布模式侧重模块体积优化及线上部署

"scripts": {  "dev": "webpack --mode development",  "build": "webpack --mode production"}
  • 运行webpack

1487780-20181211155722587-554713976.png

搭建本地服务器

  • 安装组件
$ npm install webpack-dev-server --save-dev
  • webpack.config.js添加配置

webpack-dev-server实时编译后的文件都保存到了内存当中,所以在目录中看不到编译后的文件

module.exports = {  devServer: {    // 本地服务器加载页面所在的路径    contentBase: __dirname + "/public",    historyApiFallback: true,    // 实时刷新    inline: true  } }
  • 运行服务器

1487780-20181211155735645-1681543133.png

我们修改Greeter.js以后会自动编译,然后刷新页面。

1487780-20181211155746480-1738098707.png

自动刷新 html、css

server只会实时编译js文件,html、css文件并不自动刷新所以我们需要安装相应的插件

html

$ npm install html-webpack-plugin --save-dev

webpack.config.js文件添加配置

const HtmlWebpackPlugin = require('html-webpack-plugin')module.exports = {  entry:  __dirname + "/app/main.js",  output:{    path: __dirname + "/public",    filename: "bundle.js"  },  devServer:{    contentBase: __dirname + "/public"  },  plugins: [new HtmlWebpackPlugin({                     template: __dirname + "/public/index.html",    filename: 'index.html',    inject: 'body'  })]}

css

$ npm install style-loader css-loader --save-dev

webpack.config.js文件添加配置

module: {    rules: [      {        test: /\.css$/,        use: [          { loader: "style-loader" },          { loader: "css-loader" }        ]      }    ]  }

我们在public文件夹下创建index.css文件

body{    color:#0000ff;}

在main.js导入

import '../public/index.css';const greeter = require('./Greeter.js');document.body.appendChild(greeter());

现在我们修改css及html文件都会得到动态的刷新

Loaders

Loaders是webpack提供的最激动人心的功能之一了。通过使用不同的loader,webpack有能力调用外部的脚本或工具 如 scss -> css ES6 -> ES5 JSX -> JS

我们在上面就用到了style-loader,css-loader来动态刷新css

Loaders配置

  • test : 匹配loaders处理文件的扩展名的正则表达式

  • include : 手动添加需要处理的文件

  • exclude : 需要屏蔽不进行处理的文件

  • loader : loaders名称 use的快捷配置方式

  • use : 所使用的loaders列表

Loaders使用(label)

Loaders的使用大致和上面style-loader css-loader类似,再拿label为例

  • Babel是一个JavaScript的编译平台,它可以编译现在浏览器没有完全支持的ES6及基于JavaScipt的扩展语言(React的JSX等)

  • 安装

$ npm install babel-loader babel-core babel-preset-es2015 --save-dev
  • webpack.config.js文件添加配置
module: {        rules: [{            test: /\.js$/,            use: {                loader: "babel-loader"            },            exclude: /node_modules/        }]    }

Plugins

Plugins是用来拓展Webpack功能的,它们会在整个构建过程中生效,执行相关的任务。而loaders是在项目打包构建的过程中用来处理源文件。

Plugins使用

  • 安装

我们需要通过npm根据需求来安装我们需要的插件

$ npm install plugins-name --save-dev
  • 配置

Plugins必须在webpack.config.js配置,并向plugins属性中传入new的实例。

我们在上面使用html-webpack-plugin ,你会发现我们使用require方法引入了我们需要的插件

const HtmlWebpackPlugin = require('html-webpack-plugin')

然后在plugins属性中new了一个实例

new HtmlWebpackPlugin({                     template: __dirname + "/public/index.html",    filename: 'index.html',    inject: 'body'  })

并且传入了配置参数,然后插件就会在整个构建过程中生效,执行任务。

other

转载于:https://www.cnblogs.com/chenjy1225/p/10102747.html

你可能感兴趣的文章
python之hasattr、getattr和setattr函数
查看>>
maven使用阿里镜像配置文件
查看>>
Copy code from eclipse to word, save syntax.
查看>>
arguments.callee的作用及替换方案
查看>>
Centos 6.5下的OPENJDK卸载和SUN的JDK安装、环境变量配置
查看>>
【.Net基础03】HttpWebRequest模拟浏览器登陆
查看>>
zTree async 动态参数处理
查看>>
Oracle学习之常见错误整理
查看>>
数据库插入数据乱码问题
查看>>
【转】IT名企面试:微软笔试题(1)
查看>>
IO流入门-第十章-DataInputStream_DataOutputStream
查看>>
DRF的分页
查看>>
Mysql 模糊匹配(字符串str中是否包含子字符串substr)
查看>>
python:open/文件操作
查看>>
流程控制 Day06
查看>>
Linux下安装Tomcat
查看>>
windows live writer 2012 0x80070643
查看>>
tomcat 和MySQL的安装
查看>>
git常用操作
查看>>
京东SSO单点登陆实现分析
查看>>