webpack配置吐血经验,你一定用得上

  1. 使用cnpm下载和运行命令,包括运行命令都要用这个,否则wbpack-cli又要喊你取装一次,记住都用cnpm
  2. npx webpack 可以直接运行当前文件下的node_module/.bin 目录下的命令
  3. cnpm i html-webpack-plugin -D 用hash动态生成的js文件自动引入模板html的插件
  4. 工程名字尽量不要叫webpack,而且改过名字之后最好重新删除node_module之后重新cnpm install
  5. 当要把css文件打包到js中并且查到html中的时候,用style-loader, 当要提取为单独的文件用mini-css-extract-plugin提取
  6. 使用less的时候要cnpm i less less-loader -D 两个一起装
  7. 安装babel的时候 因为babel-loader升级了8,所以配套的babel都必须重新安装了,带斜杠的奇葩 npm i babel-loader @babel/core @babel/preset-env @babel/preset-react -D
  8. 注意在babel配置中,使用的是presets带有s的命名
  9. css-loader更新到1.0.0.0后都不支持minimize压缩了,真的很蛋疼
  10. 在webpack中使用optimization的minimizer的时候,默认production的编译也不会压缩,需要下载UglifyjsWebpackPlugin用来压缩js, 用OptimizeCssAssetsWebpackPlugin来压缩css,十分蛋疼
optimization: {
    minimizer: [
        // 使用minimizer之后呢,需要这个插件来打包压缩js
        new UglifyjsWebpackPlugin(),
        // 压缩css
        new OptimizeCssAssetsWebpackPlugin()
    ]
}
  1. 用webpack安装bootstrap的时候需要增加字体文件的处理,增加 test: /\.(png|jpg|gif|svg|bmp|eot|woff|woff2|ttf)/, 字体文件的处理,当作图片的处理, 同时要手动引入bootstrap的css文件,为了方便好看,使用webpack的reslove配置来配置别名, 这样可以在工程中直接引用
resolve: {
    alias: {
        "bootstrap": "bootstrap/dist/css/bootstrap.css"
    },
}
  1. 快速安装工程依赖
cnpm install webpack webpack-cli css-loader style-loader babel-loader @babel/core @babel/preset-env @babel/preset-react html-webpack-plugin -D
  1. 热更新,watch, 和HMR的区别:
  • 热更新是在调试的时候用webpack-dev-server实现刷新浏览器来实时更新代码
  • watch: 是在production的时候加上wacthOptions属性实现代码改了重新打包加载
  • HMR: 使用webpack.HotModuleReplacementPlugin这个插件实现模块的热更新,比如用react,redux时候的前端store状态不变的情况下,只更新改变的小组件
  1. 错误: rror: Cannot find module 'import-local', 遇到这种问题,马上把讨厌的node_modules删了,然后cnpm install

  2. 配置输出目录的时候,必须用绝对路径,path.join(__dirname,"dist") 可以用path.resolve("dist")来代替

  3. 在用HtmlWebpackPlugin时候的,webpack 4 不写模板的话,会用系统内部默认模板,就没有我么模板里写的内容,注意下

new HtmlWebpackPlugin({
    template: "./src/index.html"
}),
  1. 要让 Tree Shaking 正常工作的前提是交给 Webpack 的 JavaScript 代码必须是采用 ES6 模块化语法的, 这个全部用es6语法呀

  2. webpack 总共提供了三种办法来实现 Code Splitting,如下:

  • 入口配置:entry 入口使用多个入口文件;
  • 抽取公有代码:使用 SplitChunks 抽取公有代码;
  • 动态加载 :动态加载一些代码,
  1. 在测试hmr热更新模块是,各种配置都写对了,死活都是会刷新全部网页,不能实现模块刷新,这个时候,把vscode关了, 所有浏览器关了,可能以前打开了多个,有缓存什么,搞了一个小时,最后配置没变就可以了,估计是浏览器打开了很多,都打开了localhost:8080同一个端口问题,以后注意呀

  2. Scope Hoisting 可以让 Webpack 打包出来的代码文件更小、运行的更快, 它又译作 "作用域提升",是在 Webpack3 中新推出的功能。
    代码体积更小,因为函数申明语句会产生大量代码
    代码在运行时因为创建的函数作用域更少了,内存开销也随之变小
    使用 new webpack.optimize.ModuleConcatenationPlugin(),开启此功能
    但是,但是,但是,在webpack.4.39.2里面,亲测用webpack --mode production 打包的时候就会自己用这个功能,去掉一些无用的代码,哎,所以也没啥用了这个属性

  3. 在写一些cli工具的时候,测试用cnpm link会报错,一般是没有权限,需要用管理员运行cmd来使用,二还是会报错,用npm link来测试正常,会自动把当前目录下的映射到c盘全局的npm 的node_modules下面,这样就可以全局使用命令来测试你写的cli工具了,映射关系如下

C:\Users\Jason Zeng\AppData\Roaming\npm\jasonPack -> C:\Users\Jason Zeng\AppData\Roaming\npm\node_modules\JasonPack\bin\jasonPack.js
C:\Users\Jason Zeng\AppData\Roaming\npm\node_modules\JasonPack -> E:\workspace\start\JasonPack
  1. 在 npm link后,把命名如jasonPack放入全局中后,在其他工程使用的时候老是报脚本错误,这个时候,不是什么权限不够,而是在你写的命令入口文件开头加上, 参考
    https://stackoverflow.com/questions/42838658/npm-link-causes-javascript-syntax-errors
#! /usr/bin/env node
  1. 最新的babel7在写一些es6的类的时候都需要装babel的插件也是醉了
    错误为:
upport for the experimental syntax 'classProperties' isn't currently enabled 

安装插件

cnpm i -D @babel/plugin-proposal-class-properties

在babelrc中配置插件:

plugins: ['@babel/plugin-proposal-class-properties']
  1. 在配置reac的时候报如下错误
Module parse failed: Unexpected token (5:16) You may need an appropriate loader to handle this file type, currently no loaders are configured to process this file. See https://webpack.js.org/concepts#loaders | | > ReactDom.render(<Counter/>,document.getElementById('root'));

什么loader不对,怀疑是babel-loader哪里没有加对,最后发现webpack.config.js里的module.exports单词写错,导致没有找到配置文件,我TMD想骂人

  1. 写react的表达式的时候大括号{后面不能换行再接代码,下面这样会报错
const UserAvatar = ({ size }) => (
  <UserContext.Consumer> {
user => (
      <img className={`user avatar ${size || ""}`}
        alt="user avatar"
        src={user.avatar}></img>
    )}
  </UserContext.Consumer>
)

必须为下面的模式

const UserAvatar = ({ size }) => (
  <UserContext.Consumer> 
{user => (
      <img className={`user avatar ${size || ""}`}
        alt="user avatar"
        src={user.avatar}></img>
    )}
  </UserContext.Consumer>
)
  1. nodejs连接mysql数据库,报错Client does not support authentication protocol requested by server的解决方法
    MySQL8.0版本的加密方式和MySQL5.0的不一样,连接会报错。
    解决方法如下:

通过命令行进入解压的mysql根目录下。
登陆数据库
mysql -uroot -p
输入root的密码
Enter password: ******
更改加密方式
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;
更改密码:该例子中 123456为新密码
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
刷新:
mysql> FLUSH PRIVILEGES;

  1. ERROR 13804 nodejs.AppWorkerDiedError: [master] app_worker#4:15100 died (code: 1, signal: null, suicide: false, state: dead), current workers: []
    在用egg.js的时候,配置egg-cors的跨域的包的时候,出现上面这个错误,妈的,找了半天,奇葩的错误,这种线程死的错误一般都跟服务啊,跨域啊等模块有关
  1. 'cnpm' 不是内部或外部命令,也不是可运行的程序
    用着用着居然提示cnpm不是全局命令,也是醉了,重新安装一下
    npm install -g cnpm --registry=https://registry.npm.taobao.org](https://registry.npm.taobao.org/)
  1. git提交代码到GitHub报错:
    husky > pre-commit hook failed (add --no-verify to bypass)
    解决:
    1、进入项目文件夹⁨/.git⁩/hooks⁩文件夹下
    2、删除pre-commit文件
    问题分析:
    pre-commit(客户端)钩子,它会在Git键入提交信息前运行做代码风格检查。
    如果代码不符合相应规则,则报错。

  2. 在使用@connect装饰器来修饰react类组件的时候,会报错在vscode编辑时有时会报作为表达式调用时,无法解析方法修饰器的签名。错误,此时需要在tsconfig.json中增加target配置项:(注意一定要重启VS code)

{
    "compilerOptions": {
        "target": "es6",
        "experimentalDecorators": true,
    }
}
  1. 在umi使用antd的时候, 引入antd需要配置.umirc.ts里面的'umi-plugin-react'里面的antd: true,

  2. yarn 添加包Error: EPERM: operation not permitted, unlink 'E:\test\package.json""
    正确解决方法,管理员运行,!!!!!!!!!!!!!!!!去除package.json""只读属性!!!!!!!!!!!!!!

32.yarn global add yo 后不能像npm install yo -g 后一样使用yo的全局命令
yarn global bin获取安装目录,在把这个目录加入环境变量
运行后还是报错的: 文件名、目录名或卷标语法不正确
yarn global dir 然后打开这个文件夹,把里面对应的yo.cmd编辑,去掉前面那一串 %dp0一堆路径名,找到global bin的全局路径

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,440评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,814评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,427评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,710评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,625评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,014评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,511评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,162评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,311评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,262评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,278评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,989评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,583评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,664评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,904评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,274评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,856评论 2 339

推荐阅读更多精彩内容