# demo-webpack **Repository Path**: 843571091/demo-webpack ## Basic Information - **Project Name**: demo-webpack - **Description**: webpack 中引入传统的jQuery和jQuery插件 - **Primary Language**: JavaScript - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2018-07-24 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 1、安装webpack和loader 为什么要安装webpack? 因为我们要用到webpack的 expose-loader。当然,webpack的打包功能我们也要用到。 ``` mkdir demo-webpack && cd demo-webpack npm init cnpm install webpack webpack-cli --save-dev cnpm install expose-loader -D cnpm install --save jquery ``` 上面的命令,我们创建并初始化了一个demo-webpack项目,然后安装了 `webpack webpack-cli expose-loader jquery` *注意jquery是`--save`的,webpack打包的时候会把jquery也打包到bundle.js* 2、新建`webpack.config.js` ``` const path = require('path'); module.exports = { mode:"development", entry:"./src/main.js", output:{ path: path.resolve(__dirname, 'dist'), filename:"bundle.js" }, module:{ rules: [ { test: require.resolve('jquery'), use: [ { loader: 'expose-loader', options: '$' }, { loader: 'expose-loader', options: 'jQuery' } ] } ] } } ``` 注意: `require.resolve('jquery')`下面会解释 3、新建src文件夹和main.js(webpack配置文件中的入口文件) ``` import 'jquery'; import '../public/plugin/banner/js/velocity' import '../public/plugin/banner/js/shutter' $(function () { $('.shutter').shutter({ shutterW: 2560, // 容器宽度 shutterH: 1080, // 容器高度 isAutoPlay: true, // 是否自动播放 playInterval: 3000, // 自动播放时间 curDisplay: 0, // 当前显示页 fullPage: false // 是否全屏展示 }); }); ``` 当webpack构建时,遇到`import 'jquery';`,就会告诉expose-loader处理。 第2步创建的webpack配置文件中的这句话`require.resolve('jquery')`,意思就是 *当检测到 import jquery 或者 require('jquery')* 时,就把jquery的返回值(这里用返回值描述可能不正确)暴露给window.$或者window.jQuery。结果jQuery对象就绑定到全局window对象上了。 当然,既然在这里已经绑定到window上了,那在其他模块里面就不需要再通过`import jQuery`导入jQuery了。直接使用即可。 我们在这里(main.js)导入了一个jquery的轮播插件shutter.js,直接使用就好。 4、修改package.json,添加一个脚本,用于执行webpack打包命令 ``` "scripts": { "webpack": "webpack --progress --display-modules --colors --watch", "test": "echo \"Error: no test specified\" && exit 1" }, ``` 5、执行`npm run webpack` 若没错误,即可生成 `dist\bundle.js` 6、在页面里引入这个bundle.js就行了 ```
 ```
**使用html-loader**:
 网上很多人说用 `html-withimg-loader`,我试了是可以的,但是还是用官方的html-loader吧!
1、安装 `cnpm install -D html-loader file-loader`
  html-loader 依赖file-loader,如果不安装file-loader,打包的时候会报错的。
2、增加配置
```
{
    test: /\.(html)$/,
    use: {
        loader: 'html-loader',
        options: {
            attrs: ['img:src']
        }
    }
},
```
同时修改一下图片处理的loader
```
{
    test: /\.(png|jpg|gif)$/,
    use: [
        {
            loader: 'url-loader',
            options: {
                limit: 8192,
                name: 'img/[hash:8].[name].[ext]'
            }
        }
    ]
}
```
增加了一行 `name: 'img/[hash:8].[name].[ext]'` 主要是为了打包后生成的图片名称美观一点,默认是一串16进制的字符串。
3、`npm run webpack` ,查看dist/index.html里图片链接已变成 img/***.jpg了
## 怎么把html中引入的视频也打包到dist目录?
和上面一样,不过要修改一下html-loader(增加video:src),同时增加一个url-loader检测mp4文件
```
{
    test: /\.(html)$/,
    use: {
        loader: 'html-loader',
        options: {
            attrs: ['img:src', 'video:src']
        }
    }
},
{
    test:/\.(mp4)$/,
    use:[
        {
            loader:"url-loader",
            options:{
                limit:10000,
                name:'video/[name].[ext]'
            }
        }
    ]
}
```
如果页面中有 `` ,那么打包后的 src地址也会被修改。
## 安装 clean-webpack-plugin
clean-webpack-plugin 用于清理文件
1、`npm install --save-dev clean-webpack-plugin`
2、
```
const CleanWebpackPlugin = require('clean-webpack-plugin');
plugins: [
    new CleanWebpackPlugin(['dist'])
],
```
这是我的示例代码【欢迎访问】: [gitee: demo-webpack](https://gitee.com/843571091/demo-webpack)
```
**使用html-loader**:
 网上很多人说用 `html-withimg-loader`,我试了是可以的,但是还是用官方的html-loader吧!
1、安装 `cnpm install -D html-loader file-loader`
  html-loader 依赖file-loader,如果不安装file-loader,打包的时候会报错的。
2、增加配置
```
{
    test: /\.(html)$/,
    use: {
        loader: 'html-loader',
        options: {
            attrs: ['img:src']
        }
    }
},
```
同时修改一下图片处理的loader
```
{
    test: /\.(png|jpg|gif)$/,
    use: [
        {
            loader: 'url-loader',
            options: {
                limit: 8192,
                name: 'img/[hash:8].[name].[ext]'
            }
        }
    ]
}
```
增加了一行 `name: 'img/[hash:8].[name].[ext]'` 主要是为了打包后生成的图片名称美观一点,默认是一串16进制的字符串。
3、`npm run webpack` ,查看dist/index.html里图片链接已变成 img/***.jpg了
## 怎么把html中引入的视频也打包到dist目录?
和上面一样,不过要修改一下html-loader(增加video:src),同时增加一个url-loader检测mp4文件
```
{
    test: /\.(html)$/,
    use: {
        loader: 'html-loader',
        options: {
            attrs: ['img:src', 'video:src']
        }
    }
},
{
    test:/\.(mp4)$/,
    use:[
        {
            loader:"url-loader",
            options:{
                limit:10000,
                name:'video/[name].[ext]'
            }
        }
    ]
}
```
如果页面中有 `` ,那么打包后的 src地址也会被修改。
## 安装 clean-webpack-plugin
clean-webpack-plugin 用于清理文件
1、`npm install --save-dev clean-webpack-plugin`
2、
```
const CleanWebpackPlugin = require('clean-webpack-plugin');
plugins: [
    new CleanWebpackPlugin(['dist'])
],
```
这是我的示例代码【欢迎访问】: [gitee: demo-webpack](https://gitee.com/843571091/demo-webpack)