nicenote/source/_posts/urlMaker.md
2018-05-26 17:58:20 +08:00

4.6 KiB
Raw Blame History

title date tags categories
urlMaker 2017-12-18 16:38:42
react
webpack
web项目

urlMaker 开发流程

项目需求

  • 对 url 链接中的汉字和参数进行替换

技术栈

  • 框架react

注意路由用的是4.0版

  • 打包工具webpack2.0
  • 代码es6
  • 规范ESlint

前期准备

  • 由于之前的项目中都用的是 gulp 打包,所以 webpack 是个大坑,由于没有怎么深入了解,所以对其中的一些配置有点茫然,想起之前用过 vue-cli里面有 webpack 的配置,然后,就没有然后了......
  • 百度是个好东西寻找了一系列文章个人认为简书上的《入门webpack看这篇就够了》足矣满足大多数需求很感谢作者的良苦用心。点赞

环境配置

webpack 核心模块

entry

项目唯一入口

这里发现一个问题,就是当我打包时全部 js 在同一个文件中文件太大了性能体验上是非常可怕的反正我觉得如果2g网浏览是GG了的。处理的方式是: 给入口添加一个 vendor将依赖库写入这个 vendor 中,如果觉得依赖包太大可以写成 vendor1vendor2.

output

项目输出文件夹

[name].[hash:8].js

module

html,js,css,img 处理组件

  • css-loader
  • babel-loader
  • url-loader
  • style-loader
  • postcss-loader

plugins

其他优化插件,该处只介绍 webpack 自带的一些插件库

  • webpack.BannerPlugin

给打包文件添加一个banner

  • webpack.optimize.UglifyJsPlugin

压缩 js

  • webpack.optimize.OccurrenceOrderPlugin

添加唯一 ID

webpack 推荐模块

webpack-dev-server

热加载插件,在 script 中的命令参数:

--devtool eval:为你的代码创建源地址。当有任何报错的时候可以让你更加精确地定位到文件和行号 --progress: 显示合并代码进度 --colors: 在命令行中显示颜色 --content-base build: 指向设置的输出目录 --hot: 注意在 config 文件中如果已经new plugin就不要hot了二选一。

html-webpack-plugin

根据预先的模板实例化一个html

new HtmlWebpackPlugin({
        title: '',
        template: __dirname + "/src/index.html",
        minify: {
            "removeAttributeQuotes": true,      //  移除注释
            "removeComments": true,             //  移除空格
            "removeEmptyAttributes": true,      //  移除空白行
        },
        chunks: ['index', 'vendors'],   // 配置该html文件要添加的模块
        // inject: 'body'
    })

clean-webpack-plugin

删除 webpack 缓存插件

new CleanWebpackPlugin('build/', {          //  清除缓存文件
        root: __dirname,
        verbose: true,
        dry: false
    })

extract-text-webpack-plugin

将 css 抽离出 js

test: /\.css$/,
use: ExtractTextPlugin.extract({
    fallback: "style-loader",               // 提取 css 文件
    use: [{                                 // 编译文件
            loader: "css-loader",
            options: {
                // modules: true,              // 组件化
                minimize: true              // 压缩
            }
        }, {
            loader: "postcss-loader"     // 将 css 添加前缀
        }
    ]
})

friendly-errors-webpack-plugin

友好的错误提示插件

package.json 配置

依赖包

1. autoprefixer(需要和 postcss-loader 一起使用)

补全 css 前缀

2. babel 合集
babel-core
babel-loader
babel-plugin-react-transform
babel-preset-env
babel-preset-react
3. react-transform-catch-errors、redbox-react

react 报错插件

4. copy-to-clipboard

点击复制到剪贴板插件

项目挖坑大全

关于 react-router-dom我只能说我的心好痛调了3天没找到问题

  • 引入和使用
import { HashRouter as Router, Route, Link } from 'react-router-dom'

ReactDOM.render(
  <Router>
    <App>
          <Route path="/" exact component={Home} />
          <Route path="/goods" component={Goods} />
          <Route path="/detail" component={Detail} />
          <Route path="/active" component={Active} />
    </App>
  </Router>  
  ,
  document.getElementById('app')
)

在父级 APP 中记得加入 this.props.children

路由渲染不要带着DOM一起渲染如果可以将 router 单独作为一个组件处理,本例稍简单,并未分离出去

关于图片打包

神坑啊!设置的时候是将 8K 以内的图片打包后转为 base64所以并看不到 img 文件夹生成。。。而我判断打包成功的标准就是是否生成 img 文件夹