webpack的简单实例学习

webpack工具的使用
webpack文档:webpack官方文档

一、实现js打包

1.1、创建项目testwebpack

// 在文件夹 testwebpack
// 初始化 package.json
npm init

// 安装项目依赖 node_modules
npm install webpack --save-dev

1.2、创建文件夹app 和 build
      app:放源代码
      build: 编译之后的输出路径
    1.2.1、app文件夹内创建 app.js和hello.js
        代码编写遵循 nodejs的 commonjs 规范

// app.js
// exports 导出创建的标签 hello
module.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

<body>
    <!-- 根容器 -->
    <div id="root"></div>
</body>

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-cli
npm install webpack -g
npm install webpack-cli -g

2、报错
WARNING in configuration
The 'mode' option has not been set, webpack will fallback to 'production' for th
is value. Set 'mode' option to 'development' or 'production' to enable defaults
for 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.js
Module 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 中就可以用了。

<script type="text/javascript" src="bundle.js"></script>

1.5、在根目录中创建配置文件webpack.config.js

// webpack.config.js

const 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-env
npm 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

相关推荐