Webpack (1)起步-管理资源-管理输出

基本安装使用

安装webpack

安装指定版本:npm install webpack@4.44.1 webpack-cli@3.3.12

初始化项目

npm init -y//自动设置 也可以选择 npm init 手动设置配置
之后npm install webpack webpack-cli --save-dev (生成开发环境)–save-dev可以缩写为-D```

下载打包依赖

npm install --save lodash

创建目录结构

  |- package.json
+ |- /src
+    |- index.js
+ |- /dist
+   |- index.html

src/index.js

 import _ from 'lodash';

  function component() {
    var element = document.createElement('div');

    element.innerHTML = _.join(['Hello', 'webpack'], ' ');

    return element;
  }

  document.body.appendChild(component());

dist/index.html

<!doctype html>
<html>
 <head>
   <title>起步</title>

 </head>
 <body>

 <script src="main.js"></script>
 </body>
</html>

package.json

{
  "name": "webpack-dom",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "dependencies": {
    "lodash": "^4.17.20"
  },
  "devDependencies": {
    "webpack": "^4.44.2",
    "webpack-cli": "^3.3.12"
  },
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

此处通用使用:npx webpack运行 打包静态输出main.js
如果使用全局安装webpack此处可以使用:webpack 打包输出main.js
否则可以运行./node_modules/.bin/webpack 输出

使用配置文件

///更新目录 添加webpack.config.js
 webpack-demo
  |- package.json
+ |- webpack.config.js
  |- /dist
    |- index.html
  |- /src
    |- index.js

webpack.config.js

const path = require('path');

module.exports = {
  entry: './src/index.js',
  output: {
    filename: 'bundle.js',
    path: path.resolve(__dirname, 'dist')
  }
};

之后 npx webpack 运行打包 可以看到dist文件中多了bundle.js

npm 脚本
package.json中script里加"build": "webpack"配置
可以使用npm run build 运行打包 更便捷

整合其他资源

为了使用css 需要安装配置style-loader 和 css-loadernpm install --save-dev style-loader css-loader
webpack.config.js中添加配置

   module: {
     rules: [
       {
         test: /\.css$/,
        use: [
          'style-loader',
           'css-loader'
        ]
       }
     ]
   }

src文件下添加style.css

.hello{
color:red;
}

src/index.js中

//添加引入模块
import './style.css';
//并添加class名 hello
element,classList.add("hello")

npm run build更新加载

加载图片
下载依赖:npm install --save-dev file-loader
webpack.config.js页

  const path = require('path');

  module.exports = {
    entry: './src/index.js',
    output: {
      filename: 'bundle.js',
      path: path.resolve(__dirname, 'dist')
    },
    module: {
      rules: [
        {
          test: /\.css$/,
          use: [
            'style-loader',
            'css-loader'
          ]
        },
+       {
+         test: /\.(png|svg|jpg|gif)$/,
+         use: [
+           'file-loader'
+         ]
+       }
      ]
    }
  };

添加src/icon.png
引用:src/index.js中

  import _ from 'lodash';
  import './style.css';
+ import Icon from './icon.png';

  function component() {
    var element = document.createElement('div');

    // Lodash,现在由此脚本导入
    element.innerHTML = _.join(['Hello', 'webpack'], ' ');
    element.classList.add('hello');

+   // 将图像添加到我们现有的 div。
+   var myIcon = new Image();
+   myIcon.src = Icon;
+
+   element.appendChild(myIcon);

    return element;
  }

  document.body.appendChild(component());

src/style.css

  .hello {
    color: red;
+   background: url('./icon.png');
  }

重新构建:npm run build 再次打开html文件 一切顺利文字傍边会有图片

加载字体
通过更新webpack.connfig.js 来处理为文字文件

  const path = require('path');

  module.exports = {
    entry: './src/index.js',
    output: {
      filename: 'bundle.js',
      path: path.resolve(__dirname, 'dist')
    },
    module: {
      rules: [
        {
          test: /\.css$/,
          use: [
            'style-loader',
            'css-loader'
          ]
        },
        {
          test: /\.(png|svg|jpg|gif)$/,
          use: [
            'file-loader'
          ]
        },
+       {
+         test: /\.(woff|woff2|eot|ttf|otf)$/,
+         use: [
+           'file-loader'
+         ]
+       }
      ]
    }
  };

src中添加文件my-font.woff和my-font.woff2
src/style.css

+ @font-face {
+   font-family: 'MyFont';
+   src:  url('./my-font.woff2') format('woff2'),
+         url('./my-font.woff') format('woff');
+   font-weight: 600;
+   font-style: normal;
+ }

  .hello {
    color: red;
+   font-family: 'MyFont';
    background: url('./icon.png');
  }

从新构建npm run build 看是否处理了文字

加载数据
下载依赖:npm install --save-dev csv-loader xml-loader
webpack.config.js

  const path = require('path');

  module.exports = {
    entry: './src/index.js',
    output: {
      filename: 'bundle.js',
      path: path.resolve(__dirname, 'dist')
    },
    module: {
      rules: [
        {
          test: /\.css$/,
          use: [
            'style-loader',
            'css-loader'
          ]
        },
        {
          test: /\.(png|svg|jpg|gif)$/,
          use: [
            'file-loader'
          ]
        },
        {
          test: /\.(woff|woff2|eot|ttf|otf)$/,
          use: [
            'file-loader'
          ]
        },
+       {
+         test: /\.(csv|tsv)$/,
+         use: [
+           'csv-loader'
+         ]
+       },
+       {
+         test: /\.xml$/,
+         use: [
+           'xml-loader'
+         ]
+       }
      ]
    }
  };

添加文件src/data.xml
src/data.xml

<?xml version="1.0" encoding="UTF-8"?>
<note>
  <to>Mary</to>
  <from>John</from>
  <heading>Reminder</heading>
  <body>Call Cindy on Tuesday</body>
</note>

现在,你可以 import 这四种类型的数据(JSON, CSV, TSV, XML)中的任何一种,所导入的 Data 变量将包含可直接使用的已解析 JSON:
src.index.js中引入

import Data from './data.xml';
并在component方法中打印console.log(Data)
```console.log(Data)
**全局资源**
更直观的方式将模块和资源组合在一起。无需依赖于含有全部资源的 /assets

```javascript
- |- /assets
+ |/components
+ |  |/my-component
+ |  |  |– index.jsx
+ |  |  |– index.css
+ |  |  |– icon.svg
+ |  |  |– img.png

管理输出

预先准备
src中添加print.js文件
内容如下

export default function printMe() {
  console.log('I get called from print.js!');
}

在src/index.js中使用

  import _ from 'lodash';
+ import printMe from './print.js';

  function component() {
    var element = document.createElement('div');
+   var btn = document.createElement('button');

    element.innerHTML = _.join(['Hello', 'webpack'], ' ');

+   btn.innerHTML = 'Click me and check the console!';
+   btn.onclick = printMe;
+
+   element.appendChild(btn);

    return element;
  }

  document.body.appendChild(component());

同时更新dist/index.html

  <!doctype html>
  <html>
    <head>
-     <title>Asset Management</title>
+     <title>Output Management</title>
+     <script src="./print.bundle.js"></script>
    </head>
    <body>
-     <script src="./bundle.js"></script>
+     <script src="./app.bundle.js"></script>
    </body>
  </html>

之后将entry添加src/print.js作为新的入口起点(print) 然后修改output,一便动态生成bundle文件名称
webpack.config.js

  const path = require('path');

  module.exports = {
-   entry: './src/index.js',
+   entry: {
+     app: './src/index.js',
+     print: './src/print.js'
+   },
    output: {
-     filename: 'bundle.js',
+     filename: '[name].bundle.js',
      path: path.resolve(__dirname, 'dist')
    }
  };

npm run build更新运行
设定 HtmlWebpackPlugin
npm install --save-dev html-webpack-plugin
webpack.config.js

  const path = require('path');
+ const HtmlWebpackPlugin = require('html-webpack-plugin');

  module.exports = {
    entry: {
      app: './src/index.js',
      print: './src/print.js'
    },
+   plugins: [
+     new HtmlWebpackPlugin({
+       title: 'Output Management'
+     })
+   ],
    output: {
      filename: '[name].bundle.js',
      path: path.resolve(__dirname, 'dist')
    }
  };

npm run build更新
如果你在代码编辑器中将 index.html 打开,你就会看到 HtmlWebpackPlugin 创建了一个全新的文件,所有的 bundle 会自动添加到 html 中。

清除dist时候

依赖: npm install clean-webpack-plugin --save-dev

使用和中文文档有所更新
使用可用
const { CleanWebpackPlugin } = require("clean-webpack-plugin");

plugins: [new CleanWebpackPlugin()],

笔记:

  1. webpack.config.js配置文件

  "dependencies": {///为生产环境运行-S产生
    "lodash": "^4.17.20"
  },
  "devDependencies": {///开发环境 本地存储  -D产生
    "webpack": "^4.44.1",
    "webpack-cli": "^3.3.12"
  }

2…install 用于安装 uninstall用于卸载

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大白菜1号

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值