zoukankan      html  css  js  c++  java
  • 超级详细使用Webpack4.X 搭建H5开发环境

    超级详细使用Webpack4.X 搭建H5开发环境

    96 
    会撸码的小马 
    2018.05.29 17:17* 字数 603 阅读 6453评论 0

    很久没弄博客了,这两天有点时间来搞一下最近在弄的webpack工具

    webpack是什么东西我就不介绍了,因为我使用的webpack4以上版本,这个版本有一些较大的更新,可以自己去官网上找找看就知道了。

    一、准备工作

    node安装,这个百度、Google一下一大把,不做介绍

    二、开始

    1. 构建自己的目录结构,下图是我自己弄的目录结构:


       
      1.png
    2. 创建package.json文件,或者执行npm init 来生成
      我的package.json文件如下:

    {
        "name": "h5Base",
        "version": "1.0.0",
        "description": "h5Base",
        "main": "index.js",
        "scripts": {
            "service": "http-server -p 8002",
            "build": "webpack --config ./webpack.config.js --mode production --env.NODE_ENV=production",
            "dev": "node webpack.dev.service"
        },
        "author": "mjg",
        "license": "ISC",
        "devDependencies": {
            "babel-loader": "^7.1.4",
            "birdv3": "^0.3.33",
            "clean-webpack-plugin": "^0.1.19",
            "copy-webpack-plugin": "^4.5.1",
            "css-loader": "^0.28.11",
            "extract-text-webpack-plugin": "^4.0.0-beta.0",
            "file-loader": "^1.1.11",
            "html-loader": "^0.5.5",
            "html-webpack-plugin": "^3.2.0",
            "http-server": "^0.10.0",
            "mini-css-extract-plugin": "^0.2.0",
            "postcss-loader": "^2.1.3",
            "replace": "^0.3.0",
            "style-loader": "^0.20.3",
            "uglifyjs-webpack-plugin": "^1.2.4",
            "url-loader": "^1.0.1",
            "webpack": "^4.3.0",
            "webpack-cli": "^2.0.13",
            "webpack-dev-server": "^3.1.1",
            "webpack-merge": "^4.1.2"
        },
        "dependencies": {}
    }
    

    OK,上面是我自己用到的一些库,如果有需要的朋友拷贝过去,然后执行npm install即可。

    1. 修改代码了
      3.1 先在index.html里面随便添加点测试代码:
    <!doctype html>
    <html lang="">
    
    <head>
      <meta http-equiv="pragma" content="no-cache">
      <meta http-equiv="Cache-Control " content="no-cache,must-revalidate">
      <meta name="description" content="">
      <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, maximum-scale=1">
      <meta content="telephone=no" name="format-detection" />
      <meta name="x5-orientation" content="portrait">
      <title>demo title</title>
    
    </head>
    
    <body>
      <div class="root">
          <h1>我是测试</h1>
      </div>
    </body>
    
    </html>
    

    3.2 修改index.js代码:

    import '../style/index.css'
    
    console.log('====================================');
    console.log(1);
    console.log('====================================');
    

    3.3 修改index.css代码:

    .root {
        background: red;
         200px;
        height: 200px;
        margin: 0 auto;
    }
    
    1. 代码处理完了,准备需要调试了,但是我们调试的话就需要启动服务,接下来我们就需要配置webpack的服务了
      4.1 创建webpack.config.js
    
    const webpack = require('webpack');
    const path = require('path');
    const ExtractTextPlugin = require('extract-text-webpack-plugin');
    const HtmlWebpackPlugin = require('html-webpack-plugin');
    const CleanWebpackPlugin = require('clean-webpack-plugin');
    const CopyWebpackPlugin = require('copy-webpack-plugin');
    const srcDir = path.join(__dirname, './src');
    const distDir = path.join(__dirname, './dist');
    
    module.exports = {
      entry: {
          index: [
              'webpack/hot/dev-server',
              'webpack-dev-server/client?http://localhost:80',
              "./src/js/index.js"
          ]
      },
      output: {
          path: path.resolve(__dirname, 'dist'),
          // 给js css 图片等在html引入中添加前缀
          publicPath: "../../",
          filename: 'js/[name].min.js',
      },
    
      devtool: 'source-map',
    
      module: {
          rules: [
              {
                  test: /.html$/,
                  use: [
                      {
                          loader: "html-loader",
                          options: { minimize: true }
                      }
                  ]
              },
              {
                  test: /.js$/,
                  exclude: /node_modules/,
                  use: {
                      loader: "babel-loader"
                  }
              },
              {
                  test: /.css$/,
                  exclude: /node_modules/,
                  use: ExtractTextPlugin.extract({
                      fallback: "style-loader",
                      use: {
                          loader: 'css-loader'
                      },
                  })
              },
              {
                  test: /.(gif|jpg|png|woff|svg|eot|ttf)??.*$/,
                  loader: 'url-loader?limit=8192&name=img/[name].[ext]'
              }
          ]
      },
    
      plugins: [
          new CleanWebpackPlugin(['dist']),
    
          new ExtractTextPlugin('style/[name].min.css'),
          new HtmlWebpackPlugin({
              hash: true,
              chunks: ['index'],
              template: "./src/pages/index/index.html",
              filename: "pages/index/index.html"
          }),
          
          new webpack.HotModuleReplacementPlugin(),
      ]
    };
    

    4.2 创建webpack.dev.service.js

    var WebpackDevServer = require("webpack-dev-server");
    var webpack = require("webpack");
    var webpackConfig = require('./webpack.config.js');
    var compiler = webpack(webpackConfig);
    var server = new WebpackDevServer(compiler, {
    
      
      hot: true,
      historyApiFallback: true,
      // It suppress error shown in console, so it has to be set to false.
      quiet: false,
      // It suppress everything except error, so it has to be set to false as well
      // to see success build.
      noInfo: false,
      stats: {
          // Config for minimal console.log mess.
          assets: false,
          colors: true,
          version: false,
          hash: false,
          timings: false,
          chunks: false,
          chunkModules: false
      },
      
      // contentBase不要直接指向pages,因为会导致css、js支援加载不到
      contentBase: __dirname + '/src/',
    }).listen(80, '0.0.0.0', function (err) {
      if (err) {
          console.log(err);
      }
    });
    
    
    1. 启动服务配置好了,在看看packag.json里面启动服务的命令:

    "dev": "node webpack.dev.service"

    那么在命令终端中输入: sudo npm run dev
    ps:为什么加sudo?因为使用了80端口,所以加sudo,如果不使用80端口就不用加sudo

    1. 在浏览器中输入:http://localhost/pages/index/index.html就可以看到效果了

    2. 如果想打包正式上线,执行命令: npm run build就行,注意把webpack.config.js里面的一些sourceMap、entry里面的热更新去掉,当然自己重新搞一个线上的webpack.pro.config.js也可以,把一些开发调试功能去掉就行了

    OK,以上就是我看到webpack4有更新后,随便搞得一个H5与webpack结合开发的工具,有问题欢迎随时提出!下一章讲说一下怎么使用webpack执行本地接口proxy,解决本地开发接口调试跨域问题

    附上github地址:https://github.com/majianguang/h5Base

    下一章,如何接入webpack的proxy跨域代理,以及允许绑定本地host调试的:https://www.jianshu.com/p/b3e0cc3863e6

  • 相关阅读:
    20175325 实现mypwd(选做,加分)
    A公司 推荐算法大赛 总结
    CSLM 配置粗解
    iOS开发之百度地图导航
    iOS开发之百度地图的集成——地图标注&POI检索
    iOS开发之集成百度地图踩过的那些坑(基于 Xcode7.0/iOS9.2)
    Swift开发第二篇——extension及fatalError
    iOS开发之AFN的基本使用
    iOS开发之多线程技术——NSOperation篇
    iOS开发之多线程技术——GCD篇
  • 原文地址:https://www.cnblogs.com/zhangycun/p/10078469.html
Copyright © 2011-2022 走看看