webpack工具的使用 webpack文档:
一、实现js打包
1.1、创建项目testwebpack
// 在文件夹 testwebpack// 初始化 package.jsonnpm init// 安装项目依赖 node_modulesnpm install webpack --save-dev
1.2、创建文件夹app 和 build
app:放源代码 build: 编译之后的输出路径 1.2.1、app文件夹内创建 app.js和hello.js 代码编写遵循 nodejs的 commonjs 规范// app.js// exports 导出创建的标签 hellomodule.exports = function(){ var hello = document.createElement("div"); hello.textContent = 'hello webpack'; return hello;}// build.js// require 引入var hello = require("./hello.js");// 将标签放到root中document.getElementById("root").appendChild(hello());
1.2.2、build文件夹内创建 index.html
1.3、使用 webpack进行编译,将app文件中源代码编译到build文件中
// webpack 版本4 和 webpack 版本2 的写法不一样。主要注意// webpack2 app/app.js 是要编译的文件 build/bundle.js 是要输出文件 // webpack app/app.js build/bundle.js// webpack4 npx webpack app/app.js --output-filename build/bundle.js --output-path . --mode development
编译时可能出现报错:
1、报错webpack不是内部命令--需要全局安装webpack & webpack-clinpm install webpack -gnpm install webpack-cli -g2、报错WARNING in configurationThe 'mode' option has not been set, webpack will fallback to 'production' for this value. Set 'mode' option to 'development' or 'production' to enable defaultsfor each environment.You can also set it to 'none' to disable any default behavior. Learn more: https://webpack.js.org/concepts/mode/ERROR in multi ./app/app.js build/bundle.jsModule not found: Error: Can't resolve 'build/bundle.js' in 'E:\test\1webpack' @ multi ./app/app.js build/bundle.js main[1]--查看安装webpack的版本,我安装的版本4,执行了webpack2的编译方法。需要执行webpack4的编译方法,不然会出错。
1.4、编译完成后会在build文件中生成bundled.js文件
引入到index.html 中就可以用了。1.5、在根目录中创建配置文件webpack.config.js
// webpack.config.jsconst path = require('path');// 引入 Node.js 的 path模块module.exports = { entry:"./app/app.js", // 入口 // webpack 开始打包 output:{ // webpack 如何输出结果的相关选项 path: path.resolve(__dirname, "build"), // 所有输出文件的目标路径 // 必须是绝对路径(使用 Node.js 的 path模块) filename: "bundle.js" // 输出名字 }, devtool:"eval-source-map" // 配置报错内容}// __dirname 是nodejs中的方法,用来获取当前路径。// 执行命令 webpack 直接打包
// 如果不加 __dirname 会报错Insufficient number of arguments or no entry found.Alternatively, run 'webpack(-cli) --help' for usage info.
1.6、配置快捷方式在 package.json 文件
// 配置 scripts "scripts": { "start":"webpack" }// 执行命令 npm start 打包
1.7、创建webpack服务器
// 安装全局webpack服务器 npm install -g webpack-dev-server // 安装项目依赖 npm insatll webpack-dev-server --save-dev // webpack的服务器默认端口是8080,可以通过port进行修改 // 运行webpack服务器 webpack-dev-server// 访问页面 localhost:8080/build//
1.8、配置webpack服务器 package.json
// 配置 scripts "scripts": { "start":"webpack", "dev": "webpack-dev-server" }// 执行命令 npm run dev 运行
1.9、配置热更新
// 配置 scripts "scripts": { "start":"webpack", "dev": "webpack-dev-server --content-base build --inline --hot" // --content-base build 默认路径的文件 // --inline --hot 更改内容,页面自动更新 }// 执行命令 npm run dev 运行// 访问页面 localhost:8080
2.0、脚本配置Loaders
// 安装包,获取json数据// npm install json-loader// webpack.config.js 配置module:{ rules:[ { test: /\.json$/, // 正则表达式 type: 'javascript/auto', loader: 'json-loader' // 要执行任务的名字 }}// app.js 引入 data.json。 使用node的commonjs格式,还没安装es6的编译包,不能用import。var Data = require("./data.json")// 安装依赖包,将es6编译成es5 推荐安装 @babel/preset-envnpm install babel-loader @babel/core @babel/preset-env --save-dev // webpack.config.js 配置module:{ rules:[ { test: /\.js$/, loader: 'babel-loader', query:{ presets: ['@babel/preset-env'] } } ]}// 因为版本更新的原因,安装和配置 babel-core、babel-preset-* 报错,要换成@babel/core、@babel/preset-*// 其余css、image、less的安装配置都类似,1、安装依赖包。2、webpack.config.js中配置
2.1、插件配置plugins
// 实现webpack在启动服务器之后,自动开启浏览器功能npm install --save-dev open-browser-webpack-plugin// 在 webpcak.config.js 配置// 引用 var webpack = require("webpack"); var openBrowser = require("open-browser-webpack-plugin"); module.exports = { // 插件配置 plugins: [ new openBrowser({ url: "http://localhost:8080" }) ] }
2.2、.babelrc配置文件
// 在根目录下创建文件 .babelrc// 将webpack.config.js文件的 qurey代码// query:{// presets: ['@babel/preset-env']// }// 移到 .babelrc中{ "presets": ["@babel/preset-env","@babel/preset-react"]}// 注意:在引用的时候,直接引用babel-loader即可
2.3、.gitignore 忽略文件
// 根目录下创建 .gitignore 文件//配置 node_modules/ build/ npm-debug.log