首页
更多应用
Search
1
修改iview的标签为i-的形式而不是驼峰的形式
2,791 阅读
2
PHP微信和企业微信签名
2,522 阅读
3
在VUE中怎么全局引入sass文件
2,223 阅读
4
vscode硬件占用较高解决方案
2,017 阅读
5
解决Macos下storm系列IDE卡顿的问题
1,975 阅读
默认分类
JS
VUE
CSS
mac使用技巧
React
fastmock
登录
/
注册
Search
标签搜索
react
js
vue
vscode
nodejs
项目
代码
webpack
工具
nginx
小程序
css
fastmock
eslint
npm
http
vue-cli3
git
浏览器
const
fastmock技术社区
累计撰写
102
篇文章
累计收到
26
条评论
首页
栏目
默认分类
JS
VUE
CSS
mac使用技巧
React
fastmock
页面
更多应用
搜索到
56
篇与
的结果
2023-11-22
oh my zsh 安装问题和主题的使用方法
Oh my zsh 常用安装方法sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"这个命令的执行原理是:先下载install脚本,再执行这个脚本。脚本中会克隆 oh my zsh 的仓库,通常情况下执行到这就报错了。错误提示包含的主要内容:git clone of oh-my-zsh repo failed出现这个问题很常见,网上一搜就能搜到解决办法。解决办法如下# step 1 将代码clone到本地 git clone https://github.com/ohmyzsh/ohmyzsh.git ~/.oh-my-zsh # step 2 cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc # step 3 chsh -s $(which zsh) # step 4 # 退出终端,重新打开即可安装成功效果如下oh my zsh 安装效果主题的使用首先备注几个常用目录:配置文件地址 ~/.zshrc主题存放目录 ~/.oh-my-zsh/themes插件存放地址 ~/.oh-my-zsh/plugins所有主题下载地址 https://github.com/ohmyzsh/ohmyzsh/wiki/Themes主题配置方法使用vim打开配置文件 vim ~/.zshrc找到 ZSH_THEME 配置项,直接修改后面的值就行了,比如我使用 amuse 主题,要使用什么主题就从上面的github仓库中找到对应的名称修改即可 # If you come from bash you might have to change your $PATH. # export PATH=$HOME/bin:/usr/local/bin:$PATH # Path to your oh-my-zsh installation. export ZSH="$HOME/.oh-my-zsh" # Set name of the theme to load --- if set to "random", it will # load a random theme each time oh-my-zsh is loaded, in which case, # to know which specific one was loaded, run: echo $RANDOM_THEME # See https://github.com/ohmyzsh/ohmyzsh/wiki/Themes ZSH_THEME="amuse" # Set list of themes to pick from when loading at random #... 其他内容刷新配置使其生效 source ~/.zshrc , 当然,你也可以重启电脑除了上面的固定主题的方法,还可以使用随机主题主题设置为:ZSH_THEME="random"这样每次打开终端时,主题都是随机的。PS:下一次打开终端时,会输出形如[oh-my-zsh] Random theme 'amuse' loaded的语句,'amuse'即主题名称,如果你喜欢这个主题,可以把它设为固定主题插件的使用oh-my-zsh 内置了很多插件,可以直接使用,也可以到网上下载别人开发的插件到插件目录,然后配置使用1、使用内置的插件在插件目录(~/.oh-my-zsh/plugins)找到要使用的插件的名称在配置文件的 plugins=(git docker zsh-autosuggestions) 括号中加入要使用的插件,注意:插件名称使用空格分隔,那就要求,插件名称肯定不能包含空格2、使用其他生态插件我们以命令行错误提示插件 zsh-syntax-highlighting 为例从github拉取插件项目到我们的插件目录或者直接下载代码拷贝到插件目录 git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting配置文件加入插件 plugins=(git docker zsh-autosuggestions zsh-syntax-highlighting)刷新配置使其生效 source ~/.zshrc , 当然,你也可以重启电脑其他适用插件推荐autojump插件功能:实现目录间快速跳转,当你在你的命令行打开过很多目录后,想去哪个目录直接 j + 目录名,就可以跳转到这个目录名所在的路径,而不用cd完整路径!安装步骤-此安装步骤演示了使用 brew 安装的方法,和上面的从网络拉取代码到插件目录的方法等效在终端输入:brew install autojump 输出:==> Pouring autojump-22.5.3_3.all.bottle.3.tar.gz ==> Caveats Add the following line to your ~/.bash_profile or ~/.zshrc file: [ -f /opt/homebrew/etc/profile.d/autojump.sh ] && . /opt/homebrew/etc/profile.d/autojump.sh If you use the Fish shell then add the following line to your ~/.config/fish/config.fish: [ -f /opt/homebrew/share/autojump/autojump.fish ]; and source /opt/homebrew/share/autojump/autojump.fish Restart your terminal for the settings to take effect. zsh completions have been installed to: /opt/homebrew/share/zsh/site-functions ==> Summary ???? /opt/homebrew/Cellar/autojump/22.5.3_3: 20 files, 170.9KB ==> Running `brew cleanup autojump`... Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP. Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).根据提示,在~/.zshrc文件中加入: [ -f /usr/local/etc/profile.d/autojump.sh ] && . /usr/local/etc/profile.d/autojump.sh刷新配置使其生效 source ~/.zshrc , 当然,你也可以重启电脑
2023年11月22日
421 阅读
0 评论
0 点赞
2023-06-30
chrome浏览器扩展v3版本配置项整理备忘
manifest.json配置文件{ //chrome插件的版本 "manifest_version": 3, //插件名称 "name": "ChromeName", //插件版本号 "version": "1.0.0", //插件描述,Plugin_Desc是多语言的key,chrome插件支持多语言配置,__MSG_xxx__ "description": "__MSG_Plugin_Desc__", //默认语言(如果当前浏览器设置的语言不存在多语言配置文件,则默认中文),Chrome插件的多语言只能根据当前浏览器设置的语言来设定,无法通过代码更改语言 "default_locale": "zh_CN", //内容安全政策,V2的value是字符串,V3是对象 "content_security_policy": { //原文:此政策涵盖您的扩展程序中的页面,包括 html 文件和服务人员;具体不是很明白,但是参数值得是self,即当前自己 "extension_pages": "script-src 'self'; object-src 'self'", //原文:此政策涵盖您的扩展程序使用的任何[沙盒扩展程序页面];具体不是很明白,但是参数值得是self,即当前自己 "sandbox": "sandbox allow-scripts; script-src 'self'; object-src 'self'" }, //key,发布插件后会给一个key,把那个key的值放这里 "key": "xxx", //icon,浏览器扩展程序管理里面的图标、浏览器右侧插件图标点开的下拉菜单展示的已开启插件的图标、以及插件详情页的标签卡的那个小图标 "icons": { "16": "static/img/logo-16.png", "19": "static/img/logo-19.png", "38": "static/img/logo-38.png", "48": "static/img/logo-48.png", "128": "static/img/logo-128.png" }, //背景页,后台脚本引入,v2是scripts:[xxx,xxx],可以引入多个js文件,v3是service_worker:'xxx',只能引入一个js,v3版最大的改动应该就是这里了,扩展程序管理界面的插件的那个“背景页”也将变成“Service Worker”,改动之后background.js将和浏览器完全分离,即无法调用window和ducoment对象 //可以看介绍: //1、//developer.chrome.com/docs/extensions/mv3/intro/mv3-migration/#background-service-workers; //2、//developer.chrome.com/docs/extensions/mv3/migrating_to_service_workers/ "background": { "service_worker": "background.js" }, //注入脚本,值是个数组对象,可以有多个对象 "content_scripts": [ //每个对象代表一个注入的配置 { //需要在指定页面注入的js脚本文件 "js": [ "xxx.js", "xxx.js", ], //需要注入js脚本文件的指定页面 "matches": [ "https://*.csdn.net/*", "https://*.xxx.com/*" ], //不允许注入js脚本文件的指定页面 "exclude_matches": ["https://*.xxx.com/*"], //什么时候注入的js脚本,document_start=页面加载开始时,document_end=页面加载结束时 "run_at": "document_end" } ], //API权限,需要使用某些API时需要设置该API权限才行 "permissions": [ "contextMenus", //自定义创建右键菜单API "tabs", //tab选项卡API "storage", //缓存API "webRequest", //监听浏览器请求API ... ], //主机权限,在背景页backgroud.js里面或者popup页面走请求时,请求域名的白名单权限,如果没添加的则请求会失败 "host_permissions": [ "https://*.csdn.net/*", "https://*.xxx.com/*" ], //动作API,原文:在 Manifest V2 中,有两种不同的 API 来实现操作: `"browser_action"` 和 `"page_action"` . //这些 API 在引入时扮演了不同的角色,但随着时间的推移它们变得多余,因此在 Manifest V3 中,我们将它们统一为单个 `"action"` API; //配置上action:{},可以是空对象,但是action这个配置得有,不然的话扩展程序管理界面的“Service Worker”将显示无效, //且无法点开“Service Worker”的开发者工具控制台以及点击插件图标时触发的这个方法会报错:chrome.action.onClicked.addListener, "action": { }, //通过网络访问的资源,v2是提供一个数组,v3得提供数组对象,每个对象可以映射到一组资源到一组 URL 或扩展 ID "web_accessible_resources": [{ //允许访问的资源路径,数组传多个参数 "resources": ["*/img/xxx.png", "*/img/xxx2.png"], //允许访问资源的页面 "matches": [ "https://*.csdn.net/*", "https://*.xxx.com/*" ] }] }消息监听1、插件内部发送消息//onMessage消息监听 chrome.runtime.onMessage.addListener(function (request, sender, sendResponse) { console.log(request.text); //打印出来的值:“我是个测试内容” sendResponse('触发成功了'); //返回一个内容到发送消息的回调函数中 }); //发送消息,触发上面的onMessage chrome.runtime.sendMessage('', {text: '我是个测试内容'}, function (msg) { console.log(msg); //打印的内容是:“触发成功了” });2、除了在插件内部contenscript background 和 popup之间传递消息以外,其他网站也可以给插件发送消息。方法如下首先,需要增加配置 externally_connectable:{matches:[“https://*.xxx.com/”]}指定允许哪些网站可以给当前插件发送消息,相当于白名单,只有在白名单中的站点发送的消息,扩展才会监听//onMessageExternal消息监听 chrome.runtime.onMessageExternal.addListener(function (request, sender, sendResponse) { console.log(request.text); //打印出来的值:“我是个测试内容” sendResponse('外部触发成功'); //返回一个内容到发送消息的回调函数中 }); //发送消息,触发上面的onMessageExternal //第一个参数是插件Id,指定要发送给哪个插件 //第二个参数是想要传给插件的数据信息 //第三个是让插件那边调用的回调函数,触发回来 chrome.runtime.sendMessage('chromeId', {text: '我是个测试内容'}, function (msg) { console.log(msg); //打印的内容是:"外部触发成功" });内部发送sendMessage不会触发到onMessageExternal,外部发送sendMessage不会触发到onMessage
2023年06月30日
716 阅读
0 评论
1 点赞
2023-03-24
webpack打包优化整理
设置mode属性为 production启动内置优化,如js压缩,代码丑化减少体积,css压缩等treeshaking去掉无用代码https://zhuanlan.zhihu.com/p/529044034
2023年03月24日
217 阅读
0 评论
0 点赞
2023-03-21
a 标签的 rel 属性
定义a 标签的 rel 属性用于指定当前文档与被链接文档的关系。用于a标签的可选属性 rel 和 rev 分别表示源文档与目标文档之间正式的关系和方向。rel 属性指定从源文档到目标文档的关系,而 rev 属性则指定从目标文档到源文档的关系。这两种属性可以在 a 标签中同时使用。属性值noopener用于浏览器安全防护,防止钓鱼攻击。指示浏览器打开目标文档而不授予目标文档打开源文档的访问权限,打开添加了 rel=“noopener” 的链接,window.opener 会为 null。当打开不受信任的链接时,这个属性特别有用,可以确保目标文档无法通过Window.opener属性来篡改源文档,同时仍提供 Referer HTTP标头(除非同时使用noreferrer)。注意:使用noopener时,在决定是否打开新窗口/选项卡方面,除_top,_self和_parent 以外的非空目标名称都被视为_blank 。noreferrer浏览器导航到另一个页面时,阻止HTTP header将当前页面地址或任何其他值作为Referrer发送。可以使用 rel=“noreferrer” 禁用 HTTP 头部的 Referer 属性。nofllow用于指定搜索引擎不要跟踪链接。不要将该链接计⼊权重。例如⼀些⾮本站的链接,不想传递权重,但是⼜需要加在页⾯中的像 统计代码、备案号链接、供⽤户查询的链接等等。
2023年03月21日
271 阅读
0 评论
0 点赞
2023-02-22
windows系统下npm全局命令无法执行解决办法
如题,一般我们刚安装的windows操作系统,前往nodejs官网下载nodejs安装包后,windows下默认没有node和npm指令。这是因为我们的windows系统还没有添加nodejs环境变量,所以找不到路径。这时候需要将nodejs的安装路径添加到环境变量的 Path 变量中。如我的路径C:\Program Files\nodejs这时候,再回到cmd或者powershell,命令行就可以执行 node 命令了。但是还不能执行使用npm安装的全局包的命令。如 cnpm,nvm,nrm 等,解决办法如下1、使用 npm config get prefix 找到npm全局包的安装路径,如我的电脑输出路径为C:\Users\Administrator\AppData\Roaming\npm将这个路径也添加到环境变量 Path 中,重启cmd或powershell命令行工具就可以了。如果进行了上面的配置还是不行,并且控制台打印如下内容[](//upload-images.jianshu.io/upload_images/24769119-157c81028621d8b8.png?imageMogr2/auto-orient/strip|imageView2/2/w/979/format/webp)这是因为windows的安全策略禁用了当前目录下的命令解决方案如下1、在系统中 搜索框 输入 PowerShell 或者 右击任务栏的电脑图标,找到 Windows PowerShell(管理员);2、点击“管理员身份运行”;3、输入 set-ExecutionPolicy RemoteSigned 回车;4、根据提示内容,输入A跳过后面的步骤确认,回车等待执行结束;5、重启控制台 输入 cnpm --version 执行就可以成功了。
2023年02月22日
316 阅读
0 评论
0 点赞
2022-12-07
GitHub 代码库收藏
地址:https://github.com/drawdb-io/drawdb在线数据库设计,可罗拉拽设计数据表的字段,索引,关联关系等地址:https://github.com/trekhleb/javascript-algorithms算法和数据结构是软件开发的支柱。顾名思义,这个代码库中包含许多流行算法和数据结构的 JavaScript 示例。每个算法和数据结构都有单独的 README 文件,其中包含相关的说明以及进一步的参考资料。这个代码库的 Star 数超过 15.5 万个,也是 GitHub 上 Star 数最多的代码库之一。地址:https://github.com/airbnb/javascript这个代码库来自 Airbnb。编程是一门艺术,而开发人员是艺术家,没有艺术家想把作品搞得一塌糊涂。这个代码库中提供了你可以在编程过程中遵循的最佳实践,GitHub 上的 Star 数超过 12.9 万个。地址:https://github.com/ryanmcdermott/clean-code-javascript" 代码的整洁性 " 是 Robert C. Martin 的著作《代码整洁之道》(Clean-code) 中提出的最著名的软件工程原则之一。这个代码库是 JavaScript 版的《代码整洁之道》,是使用 JavaScript 编写可读、可重用和可重构软件的指南,GitHub 上的 Star 数为 7.5 万个。地址:https://github.com/lydiahallie/javascript-questions这个代码库包含大量(高级)JavaScript 问题及其说明。你可以通过这个代码库测试一下自己的 JavaScript 水平,复习一下 JavaScript 知识,或者为编程面试做准备。GitHub 上的 Star 数为 4.95 万个。地址:https://github.com/leonardomso/33-js-concepts这个代码库旨在帮助开发人员掌握 JavaScript 中的概念。虽然学习这些概念不是必须的,但对未来的学习有很多裨益。这个代码库在 GitHub 上 Star 数为 5.3 万。地址:https://github.com/elsewhencode/project-guidelines虽然开发新项目令人激动万分,但对维护人员来说是一个潜在的噩梦。这个代码库包含一系列 JavaScript 项目的最佳实践。这个代码库在 GitHub 上有 2.75 万个 Star。地址:https://github.com/30-seconds/30-seconds-of-code这个代码库收集了各种 ES6 辅助函数的 JavaScript 片段,包含有关如何处理原语、数组和对象的说明,以及算法、DOM 操作函数和 Node.js 实用程序。GitHub 上的 Star 数为 10.5 万个。
2022年12月07日
480 阅读
2 评论
0 点赞
2022-11-23
webpack5.x+React18搭建移动端项目
webpack5.x+React18搭建移动端项目项目仓库地址 https://github.com/MarvenGong/webpack5-react18-ts-basic在项目开发中,每开始一个新项目我都是使用现有的脚手架,这非常便于快速地启动一个新项目,而且通用的脚手架通常考虑地更加全面,也有利于项目的稳定开发;不过对于一个小项目,根据需求自己搭建可能会更好,一方面小项目不需要脚手架那么丰富的功能,另一方面可以提高对项目的掌控度以方便后期的扩展本项目基于公司内一个移动端项目搭建,旨在搭建一个快速,高效,灵活的前端开发环境。项目中使用了最新版本的webpack构建工具,最新版本的react前段框架和react-router6.x特性搭建,通过本项目,可以可以熟悉和巩固以下基础技能webpack5构建原理和基本配置,以及打包性能的提升和使用方法react18的feature,如,根组件的创建方式等const root = createRoot(document.getElementById('root') as Element); root.render(<RouterProvider router={router} />);react-router6 的新特性和单文件路由的使用方式wecpack5 中配置移动端响应式方案 rem布局的方法其他webpack插件和loader的使用项目仓库地址 https://github.com/MarvenGong/webpack5-react18-ts-basic接下来,详细说明项目中的各个配置环境webpack5的一个重要特性,会根据配置的mode属性是develop还是production来判断是否需要开启构建优化,这个优化过程是指对构建产品的优化,如js uglify,压缩,tree-shaking 等等,所以,我们的开发环境,是可以不用用到那些优化操作的,那么就需要把mode指定成 develop 这样可以在我们保存代码后,获得更快的热更新速度,我这里为了简单,直接在npm script中制定env,在webpack.js中使用package.json 中的scripts"scripts": { "serve": "cross-env NODE_ENV=development webpack serve --config webpack.config.js", "dev": "npm run serve", },PS: 切忌在NODE_ENV=development顺手写上&&写上了就设置不上了webpack.config.js 中使用环境变量const isDev = process.env.NODE_ENV === 'development'; mode: isDev ? 'development' : 'production',基础配置1、entry入口,配置webpack构建的入口文件我这里使用了package.json 中的name属性的值作为主文件的名称entry: { [packageJson?.name]: path.resolve(__dirname, './src/app.tsx'), },2、output 制定输出文件路径和文件名output: { // 开发环境不使用hash文件名 filename: isDev ? '[name].js' : '[name].[hash].js', path: path.resolve(__dirname, './dist'), publicPath: '/', clean: true, // 输出文件前会先清空目标目录的文件 },3、stats 指定webpack在控制台的输出内容stats: { all: false, assets: true, errors: true, assetsSort: '!size', // 按照文件大小倒序 entrypoints: true, modules: false, assetsSpace: 1000, preset: 'minimal', },4、devServer 配置本地开发服务器,如端口,代理等,此处不做详细说明,5、devtool 制定sourcemap文件生成方式devtool: isDev ? 'inline-source-map' : 'source-map', // 开发环境直接打包到js文件中,现网环境打包到独立文件,我的处理方式是在自动化部署工具中将sourcemap文件保存到特定地方,线上排查的时候使用6、resolve 配置6-1 extensions 指定webpack需要处理的文件扩展名类型6-2 alias 路径别名,注意要去 tsconfig 中相应配置,否则代码中会报ts错误项目使用的loader处理module说明ts-loader 处理typescript 语法以及es6特性(包含了babel-loader)style-loader 处理样式资源到html中,开发环境使用MiniCssExtractPlugin.loader 处理样式资源到单独的样式文件中,生产环境使用css-loader 让我们可以在js(x)或者ts(x)中使用import语句导入样式文件 如 import ‘./style.less’postcss-loader 对css进行编译处理,本项目主要用来处理 px2rem 将我们的样式中的px转为rem(只能针对import导入的样式文件,行内样式不生效)less-loader less编译为cssurl-loader 处理图片和字体等资源,小于limit则编码,大于则处理路径,包含了 file-loader(file-loader 主要作用是使我们可以在js(x)或者ts(x)中使用import语句导入静态资源文件 import ‘./xxx.png’)使用到的plugins做打包后处理说明copy-webpack-plugin 拷贝 public下的静态资源到 dist 目录clean-webpack-plugin 清理打包目标目录,防止重复文件WebpackBar 美化打包进度显示的插件HtmlWebpackPlugin 处理我们的构建产物到指定的html中,重中之重MiniCssExtractPlugin 压缩我们的css文件,只在生产环境使用好了,有了上面的介绍,就可以直接看我们的webpack配置文件了主webpack.config.js// @ts-nocheck const path = require('path'); const tsImportPluginFactory = require('ts-import-plugin'); const SpeedMeasurePlugin = require('speed-measure-webpack-plugin'); const MiniCssExtractPlugin = require("mini-css-extract-plugin"); const smp = new SpeedMeasurePlugin(); const fs = require('fs'); const packageJson = require('./package.json'); const optimization = require('./webpack-configs/optimization'); const config = require('./webpack-configs/config'); const plugins = require('./webpack-configs/plugins'); const isDev = process.env.NODE_ENV === 'development'; const SMP_SWICTH = false; console.log('-------当前环境-------', process.env.NODE_ENV); const wrapConfig = (isDev && SMP_SWICTH) ? smp.wrap : (config) => config; module.exports = wrapConfig({ target: 'web', mode: isDev ? 'development' : 'production', entry: { [packageJson?.name]: path.resolve(__dirname, './src/app.tsx'), }, output: { filename: isDev ? '[name].js' : '[name].[hash].js', path: path.resolve(__dirname, './dist'), publicPath: '/', clean: true, }, // infrastructureLogging: { // level: 'error' // }, stats: { all: false, assets: true, errors: true, assetsSort: '!size', entrypoints: true, modules: false, assetsSpace: 1000, preset: 'minimal', }, devServer: { ...config.dev, historyApiFallback: true, // static: { // directory: path.join(__dirname, './public'), // }, watchFiles: './src/**/*', }, devtool: isDev ? 'inline-source-map' : 'source-map', resolve: { alias: { '@src': path.resolve(__dirname, './src'), '@tea/app': path.resolve(__dirname, './app'), }, extensions: ['.ts', '.tsx', '.js', 'less'], }, module: { rules: [ { test: /\.(jsx|tsx|js|ts)$/, loader: 'ts-loader', options: { transpileOnly: true, getCustomTransformers: () => ({ before: [ tsImportPluginFactory([ { style: false, libraryName: 'lodash', libraryDirectory: null, camel2DashComponentName: false, }, { style: true }, ]), ], }), compilerOptions: { module: 'esnext', }, }, exclude: /node_modules/, }, { test: /\.(le|c)ss$/, use: [ isDev ? 'style-loader' : MiniCssExtractPlugin.loader, // 现网环境才提取css到一个文件中 { loader: 'css-loader', // 使用import语句导入样式 }, { loader: "postcss-loader", options: { postcssOptions: { config: './postcss.config.js', }, sourceMap: true, } }, { loader: 'less-loader', // 转less为css options: { lessOptions: { modifyVars: { '@body-background': '#f5f5f5', }, javascriptEnabled: true, }, }, }, // { // loader: 'style-resources-loader', // options: { // patterns: path.resolve(__dirname, './src/styles/common.less'), // 全局引入公共的scss 文件 // }, // }, ], }, { test: /\.(png|jp(e)?g|gif|woff(2)?|ttf|eot|svg)(\?v=\d+\.\d+\.\d+)?$/, use: [ { loader: 'url-loader', // 处理图片和字体等资源,小于limit则编码,大于则处理路径,包含了 file-loader options: { limit: 8192, }, }, ], }, ], }, watchOptions: { // 设置不监听的⽂件或⽂件夹,默认为空 ignored: /node_modules/, // ⽂件改变不会⽴即执⾏,⽽是会等待300ms之后再去执⾏ aggregateTimeout: 300, // 原理是轮询系统⽂件有⽆变化再去更新的,默认1秒钟轮询1000次 poll: 1000, }, plugins, optimization: !isDev ? optimization : {}, }); 在根目录下的wenpack-configs 目录中的下面三个拆出来的jswebpack 插件配置 plugins.jsconst path = require('path'); const HtmlWebpackPlugin = require('html-webpack-plugin'); const CopyWebpackPlugin = require('copy-webpack-plugin'); const MiniCssExtractPlugin = require("mini-css-extract-plugin"); const WebpackBar = require('webpackbar'); const { CleanWebpackPlugin } = require('clean-webpack-plugin'); const chalk = require('chalk'); const webpack = require('webpack'); const isDev = process.env.NODE_ENV === 'development'; const config = require('./config'); module.exports = [ new CopyWebpackPlugin({ patterns: [ { from: path.resolve(__dirname, '../public/px2rem-hike.js') } ], }), new CleanWebpackPlugin({ dry: false, // 是否打印删除的内容 }), // 热更新替换 new webpack.HotModuleReplacementPlugin(), // @ts-ignore new WebpackBar({ name: '能碳工场移动端h5', color: '#0049b0', // 默认green,进度条颜色支持HEX basic: true, // 默认true,启用一个简单的日志报告器 reporter: { change() { console.log(chalk.blue.bold('文件修改,重新编译...')); }, afterAllDone(context) { console.log(chalk.bgBlue.white(' 能碳工场移动端 ') + chalk.green(' 编译完成')); isDev && console.log(chalk.bgBlue.white(' 能碳工场移动端 ') + chalk.green(' 开发预览地址:http://127.0.0.1:' + config.dev.port)) }, }, }), new HtmlWebpackPlugin({ minify: false, chunks: 'all', template: path.resolve(__dirname, '../public/index.html'), filename: 'index.html' }), new webpack.ContextReplacementPlugin(/moment[/\\]locale$/, /zh-cn|ja|ko/), ].concat(isDev ? [] : [new MiniCssExtractPlugin({ filename: '[name].[hash].css', })])webpack优化配置 optimization.jsconst CssMinimizerPlugin = require("css-minimizer-webpack-plugin"); module.exports = { minimize: true, minimizer: [ new CssMinimizerPlugin(), '...' // 压缩css 和 js ], splitChunks: { chunks: 'async', cacheGroups: { defaultVendors: { test: /[\\/]node_modules[\\/]/, priority: -10, reuseExistingChunk: true, }, default: { minChunks: 2, priority: -20, reuseExistingChunk: true, }, }, }, }; 其他常用需要修改配置 config.jsmodule.exports = { dev: { host: '0.0.0.0', port: 10010, hot: true, open: false, client: { overlay: { errors: true, warnings: false, }, }, proxy: { '/api': { // logLevel: 'debug', changeOrigin: true, pathRewrite: { '^/api': '' }, target: 'http://30.168.123.79', }, }, } };
2022年11月23日
484 阅读
4 评论
1 点赞
2022-06-29
vscode配置备份
{ "editor.fontFamily": "'Courier New', Menlo, Monaco, monospace", "editor.tabSize": 2, "editor.fontSize": 14, "editor.formatOnSave": true, "editor.codeActionsOnSave": { "source.fixAll.eslint": true }, "eslint.validate": ["javascript", "javascriptreact", "html", "vue", "typescript", "typescriptreact"], "explorer.compactFolders": false, "workbench.tree.indent": 12, "workbench.editor.enablePreview": false, "sync.gist": "ac382393a32ea171d130f70b8ed60f4b", "typescript.updateImportsOnFileMove.enabled": "always", "javascript.updateImportsOnFileMove.enabled": "always", "prettier.eslintIntegration": true, "window.zoomLevel": 1, "workbench.iconTheme": "material-icon-theme" }
2022年06月29日
461 阅读
0 评论
0 点赞
2022-03-31
使用docker搭建一个简单的nginx服务
操作步骤1、在任意目录位置创建Dockerfile 文件,输入如下内容FROM ubuntu/nginx COPY ./index.html /var/www/html/index.html CMD ["nginx", "-g", "deamon off;"]2、 在当前目录新建一个html文件作为静态页面3、 在当前目录执行 docker build -t test:v0.1 . 等待构建完成4、 执行docker images 查看镜像是否构建成功5、 执行docker run -d -p 8082:80 test:v0.16、 在浏览器访问 127.0.0.1:8082 验证是否能访问到上面新建的那个html内容涉及到的内容解释1、 Dockerfile 文件中a、 FROM 指定构建的基础镜像 b、 COPY 将当前空间(Dockerfile所在目录)的文件拷贝到镜像内容中,此处拷贝的是nginx的默认的静态页面地址 c、 CMD 指定执行docker run 指令时默认执行的命令,这里启动nginx2、 Docker 命令a、 docker build -t 指定镜像的tag信息,后续使用镜像的时候讲作为name使用 b、 docker run -d 表示在后台运行docker c、 docker run -p 指定端口映射,这里表示外部端口 8082 映射到当前启动后的容器(container)的80 端口(也就是上面启动的nginx)
2022年03月31日
396 阅读
0 评论
0 点赞
2022-03-19
js复制和粘贴内容
复制-将指定内容添加到粘贴板/** * copyToClip * @param content * @param callback */ export const copyToClip = (content: string, callback?: () => void) => { var aux = document?.createElement?.('input'); aux?.setAttribute?.('value', content); document?.body?.appendChild?.(aux); aux?.select(); document?.execCommand('copy'); document?.body?.removeChild?.(aux); return callback?.(); };粘贴 js不能直接读取粘贴板内容,下面的代码在多数环境下不生效const text = await navigator?.clipboard?.readText?.();我们采取变通的方案来处理。1、在页面中添加一个input输入框,将其绝对定位到页面中不可见的位置<input type='text' id='text-all' key='text-all' onPaste={(e) => handlePaste(e)} style={{ position: 'absolute', top: -10000, zIndex: 10000 }} />监听到ctrl-v事件时,先让上面的input获得焦点,再手动触发他的paste事件,这时input会填充粘贴板中的内容const hideInput: HTMLInputElement = document.getElementById('text-all') as any; hideInput?.focus(); hideInput?.dispatchEvent(new Event('paste', { bubbles: true }));给这个input添加onPaste事件,在事件处理函数中获取input的内容,或者获取粘贴板的内容const clipboardData = e?.clipboardData || e.originalEvent?.clipboardData;
2022年03月19日
468 阅读
0 评论
0 点赞
1
2
3
...
6