Vue-Webpack
Vue:webPack
1.1 什么是Webpack
- 本质上,webpack是一个现代JavaScript应用程序的静态模块打包器(module bundler)。当webpack处理应用程序时,它会递归地构建一个依赖关系图(dependency graph),其中包含应用程序需要的每个模块,然后将所有这些模块打包成一个或多个bundle.
- Webpack 是当下最热门的前端资源模块化管理和打包工具,它可以将许多松散耦合的模块按照依赖和规则打包成符合生产环境部署的前端资源。还可以将按需加载的模块进行代码分离,等到实际需要时再异步加载。通过loader 转换,任何形式的资源都可以当做模块,比如CommonsJS、AMD、ES6、css、JSON、CoffeeScript、LESS等;
- 伴随着移动互联网的大潮,当今越来越多的网站已经从网页模式进化到了WebApp模式。它们运行在现代浏览器里,使用HTML5、CSS3、ES6等新的技术来开发丰富的功能,网页已经不仅仅是完成浏览器的基本需求; WebApp通常是一个SPA (单页面应用),每一个视图通过异步的方式加载,这导致页面初始化和使用过程中会加载越来越多的JS代码,这给前端的开发流程和资源组织带来了巨大挑战。
通过export暴露接口,通过import导入接口,相当于Java中的类。变量在单独的类中生效,不会导致冲突
AMD规范
Asynchronous Module Definition规范其实主要一个主要接口define(id?,
dependencies?, factory);它要在声明模块的时候指定所有的依赖dependencies,并且还要当做形参传到 factory 中,对于依赖的模块提前执行。
define( "module ", [ "dep1", "dep2"], function(d1, d2) {
return someExportedvalue;
}) ;
require( [ "module", "../file.js" ],function ( module, file) {});
优点
- 适合在浏览器环境中异步加载模块
- 可以并行加载多个模块
缺点
- 提高了开发成本,代码的阅读和书写比较困难,模块定义方式的语义不畅
- 不符合通用的模块化思维方式,是一种妥协的实现
CMD规范
Commons Module Definition 规范和AMD很相似,尽量保持简单,并与CommonsJS和NodeJS的 Modules规范保持了很大的兼容性。
define( function(require, exports, module) {
var $ = require( "jquery " ) ;
var spinning = require( " . / spinning" );
exports.dosomething = ...;
module.exports = ...;
});
优点:
- 依赖就近,延迟执行
- 可以很容易在NodeJS中运行
缺点
- 依赖SPM打包,模块的加载逻辑偏重
ES6规范
EcmaScript6标准增加了JavaScript语言层面的模块体系定义。ES6模块的设计思想,是尽量静态化,使编译时就能确定模块的依赖关系,以及输入和输出的变量。CommonsJS和AMD模块,都只能在运行时确定这些东西。
import "jquery " ;
export function dostuff( ){}
module "localModule"{}
优点
- 容易进行静态分析
- 面向未来的 EcmaScript标准
缺点
- 原生浏览器端还没有实现该标准
- 全新的命令,新版的NodeJS才支持
1.2 WebPack的作用
- 代码编写时使用的是ES6规范,但是大多数浏览器还是只支持ES5规范。
- 使用WebPack打包,将ES6规范的代码自动打包编译成ES5规范。
1.3 安装WebPack
安装
npm install webpack -g
npm install webpack-cli -g
测试安装成功
webpack -v
webpack-cli - v
配置
创建webpack.config .js配置文件
- entry: 入口文件,指定WebPack用哪个文件作为项目的入口
- output:输出,指定WebPack把处理完成的文件放置到指定路径.
- module:模块,用于处理各种类型的文件
- plugins:插件,如:热更新、代码重用等.
- resolve:设置路径指向
- watch:监听,用于设置文件改动后直接打包
1.4 使用webPack

新建一个文件夹,用IDEA打开
创建一个名为modules的目录,用于放置JS模块等资源文件
在modules下创建模块文件,如hello.js,用于编写JS模块相应代码
//暴露一个方法
exports.sayHi=function () {
document.write("<h1>你好Vue</h1>")
}
在modules下创建一个名为main.js的入口文件,用于打包时设置entry属性
//main.js是程序的主入口
//引入一个接口(可以包含多个方法,类似于Java中的类)
//引入的接口名命名为hello
var hello=require("./hello");
//调用接口中的方法
hello.sayHi();
在项目目录下创建webpack.config.js配置文件,使用webpack命令打包
module.exports={
//程序的主入口./表示当前目录
entry:'./modules/main.js',
//编译成ES5语法后输出位置
output:{
filename:"./js/bundle.js"
},
//环境
mode:'development'
};
在IDEA中执行打包命令

打包好的js文件,可以直接使用

创建一个html文件,引入该js文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script src="dist/js/bundle.js"></script>
</body>
</html>

热部署,js文件发生改变会立刻打包成一个新的js文件(一般不这么做)
#参数--watch用于监听变化
webpack --watch

浙公网安备 33010602011771号