# webpack-tutorial **Repository Path**: solocoding/webpack-tutorial ## Basic Information - **Project Name**: webpack-tutorial - **Description**: 新手培训资料 - **Primary Language**: JavaScript - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-07-09 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 关于Webpack的学习 === 本教材适用于超级新手查看和参阅。主要用于学习Webpack构建前端项目,中间穿插着React.js的使用。 # 目录 - [前言](#前言) - [Node.js](#nodejs) - [NPM](#npm) - [Webpack](#webpack) - [安装](#安装) - [初始化配置](#初始化配置) - [安装webpack](#安装webpack) - [实例运行](#实例运行) - [使用功能介绍](#使用功能介绍) - [资源加载](#资源加载) - [babel加载](#babel加载) - [css加载](#css加载) - [CSS Modules](#css-modules-见demo05) - [图片加载](#图片加载---见demo04) - [UglifyJs插件](#uglifyjs插件-见demo06) - [HTML Webpack插件](#html-webpack插件--见demo07) - [命令启动打开入口路径](#命令启动打开入口路径----见demo8) - [环境变量的使用](#环境变量的使用) - [代码分割](#代码分割) - [用bundle-loader分割代码](#用bundle-loader分割代码-见demo11) - [普通模块React应用](#普通模块react应用---见demo12) - [jQuery/jslite加载](#jqueryjslite加载--见demo13) - [每个模块中使用JSLite或者jQuery](#每个模块中使用jslite或者jquery-demo14) - [暴露全局变量](#暴露全局变量) - [模块热替换](#模块热替换hot-module-replacemen) - [React Router 配置](#react-router-配置--见demo18) - [参考资料](#参考资料) ## 前言 下面介绍webpack及与webpack相关的几个软件工具的概念。 ### Node.js [Node.js](http://nodejs.org/) 是一个在浏览器外部创建互联网应用程序的框架,它基于 Google 开发的 V8 JavaScript 引擎,轻量,高效,事件驱动,非阻塞I/O,特别适合运行于跨分布式设备的实时数据处理程序。 **作用** 1. 搭建web网络应用 1. 开发Unix命令行工具 1. 开发构建工具,辅助前端开发(webpack,grunt,gulp..) **优点** 1. 采用事件驱动、异步编程,为网络服务而设计。 2. Node.js非阻塞模式的IO处理给Node.js带来在相对低系统资源耗用下的高性能与出众的负载能力。 3. Node.js轻量高效,可以认为是数据密集型分布式部署环境下的实时应用系统的完美解决方案。 4. Node非常适合如下情况:在响应客户端之前,您预计可能有很高的流量,但所需的服务器端逻辑和处理不一定很多。 **缺点** 1. 可靠性低,可以使用其它方法来提高可靠性。 2. 单进程,只支持单核CPU,默认不能充分的利用多核CPU服务器,一旦这个进程崩掉,那么整个web服务就崩掉了,可以通过自带的方法或者pm2管理工具来利用多核CPU。 ### NPM [npm](https://www.npmjs.com/) (node package manager) node.js的包管理器,用于node插件管理(安装、卸载、更新、管理依赖等)。 **是做什么的?** 1. JS开发人员可以轻松地更新、共享和重用代码。 1. 管理项目中的依赖包模块 1. 与他人分享和接收反馈 **替代工具** 1. **cnpm**:淘宝网提供的国内NPM镜像,因为npm安装插件是从外国服务器下载,受网络影响大,可能出现异常。 1. **yarn**:是Facebook、Google、Exponent 和 Tilde 联合推出了一个新的 JS 包管理工具,是为了弥补 npm 的安装包(packages)的速度不够快、拉取的 packages 可能版本不同、npm 允许在安装 packages 时执行代码可能产生安全隐患等一些缺陷而出现的 ### Webpack [Webpack](http://webpack.github.io/)它是一个模块打包器,我们将他用于前端项目流程构建,能通过npm安装,还可以使用`cnpm`、`yarn`等工具安装,下面介绍npm安装 **可以做哪些事儿?** 1. 使用loader转换器将各种类型的资源转换成 JavaScript 模块来进行处理 1. 代码压缩、分割、合并 1. 打包静态资源 1. 自动生成HTML5离线缓存配置等.... 可以使用功能远不止于此,Webpack有强大的社区,维护着许多插件,这些插件可以帮助你自动化构建您的项目。 **同类工具** 1. `grunt`:是基于Node.js的项目构建工具。它可以自动运行你所设定的任务。Grunt拥有数量庞大的插件,几乎任何你所要做的事情都可以用Grunt实现。 1. `gulp`:基于Node.js实现 Web 前端自动化开发的工具,能够自动化处理你在做项目以后需要完成的一系列的重复工作。比如,压缩代码,合并代码,检查语法是否正确,优化图片等等你可以需要手动重复处理的事情,利用它能够极大的提高开发效率。 ## 安装 首先要安装[Node.js](https://nodejs.org/en/download/), Node.js 自带了软件包管理器 npm,用 npm 安装 Webpack ### 初始化配置 在安装之前需要初始化一个`package.json` ```bash $ npm init ``` **注**:每个项目的根目录下面,一般都有一个项目配置文件package.json,定义了这个项目所需要的各种模块,以及项目的配置信息(比如名称、版本、许可证等元数据)。npm install命令根据这个配置文件,自动下载所需的模块,也就是配置项目所需的运行和开发环境。 关于package.json [详见package.json](http://javascript.ruanyifeng.com/nodejs/packagejson.html) ### 安装webpack ```shell # 方法一 $ npm install webpack -g # 全局安装 # 方法二 $ npm install webpack --save # 本地安装,存储到配置(package.json)中 ``` **本地安装** 工具独立于每个项目,比如一些项目依赖`webpack 1.0` 一些项目依赖 `2.0` 这时可使用本地安装来构建项目。 本地安装会将webpack安装在跟package.json同级目录下的 `node_modules`下的.bin文件夹中,运行webpack时必须指定路径 ./node_modules/.bin/webpack。考虑到这样运行会比较繁琐,可以在配置文件package.json中的做如下定义 ```bash "scripts": { "dev": "webpack" } ``` 就可通过以下命令来快捷运行webpack ```bash npm run dev ``` `--save` 通过这个参数,将保存配置信息至package.json(package.json是nodejs项目配置文件) `--save-dev ` 保存至package.json的devDependencies节点,不指定-dev将保存至dependencies节点 **全局安装**,在任意目录下均可运行,适用于新手初学,只做一个项目,或者做实例演示。 `-g` 在安装工具的时候添加这个参数,即可安装到全局。 本地安装使用 `npm install webpack --save` 时package.json文件中的依赖项`dependencies`会添加一行依赖,代码如下: ```json "dependencies": { "webpack": "^1.14.0" } ``` 这些依赖工具通过 `require()` 或者 ES6 语法调用工具。 如果想要安装指定版本,使用命令如下: ```shell $ npm install webpack@2.2.0-rc.3 ``` 本项目在写的时候使用的是,webpack beta版本,没有正式发布。在运行的过程中,相应的其它的工具也需要配置新版本,下面是我的配置仅提供参考: ```json "dependencies": { "webpack": "~2.2.0-rc.3", "babel-core": "^6.21.0", "babel-loader": "^6.2.10", "babel-plugin-transform-runtime": "^6.15.0", "babel-polyfill": "^6.20.0", "babel-preset-babili": "0.0.9", "babel-preset-es2015": "^6.18.0", "babel-preset-react": "^6.16.0", "babel-preset-stage-2": "^6.18.0", "babili-webpack-plugin": "0.0.7", "html-webpack-plugin": "^2.25.0", "moment": "^2.17.1", "react": "^15.4.1", "react-dom": "^15.4.1" } ``` 更多相关内容参加[【原】nodejs全局安装和本地安装的区别](http://www.cnblogs.com/PeunZhang/p/5629329.html?winzoom=1) ## 实例运行 添加一个配置文件webpack.config.js;一个入口js文件main.js;一个静态页面 index.html 见[demo01](./demo01) ### 实例代码 index.html ```html