开源中国

我们不支持 IE 10 及以下版本浏览器

It appears you’re using an unsupported browser

为了获得更好的浏览体验,我们强烈建议您使用较新版本的 Chrome、 Firefox、 Safari 等,或者升级到最新版本的IE浏览器。 如果您使用的是 IE 11 或以上版本,请关闭“兼容性视图”。
博客专区 - 开源中国社区

精彩阅读

  • 最新推荐

  • 今日热门

  • 本周热门

  • 每日一博

  • 最新文章

前端基础(四):前端国际规范收集

  字数:1142 阅读时间:5分钟   前言 由于前端技术的灵活性和杂乱性,导致网上的许多解决方案不够全面甚至是完全错误,...
老司机带你撸代码 发布于 2天前 阅读 104

微信小程序组件化开发框架wepy 学习(二)

## 文件 1.文件结构 文件结构类似`VUE`文件 扩展名为 ```.wpy``` ``` ``` 2.文件类型 文件类型声明与` ``` * 声明为page 页面 页面为 无组件页面或者 组件页面 声明类继承 ==wepy.page== ``` ``` * 声明为组件 页面 页面为 无组件页面或者 组件页面 声明类继承 ==wepy.page== ``` ``` >总结: **编译后上述三种类型对应生成各自的原生类型 `json、 wxss、 js、 wxml` 生成文件的文件名与`wpy`文件类名无关。类名仅对引用有关 例如类型为 `Page`的文件 `index.wpy`编译后会生成`index.json、 index.wxss、 index.js、 index.wxml` 类名可自行定义 约定 ==不要以$ _== 开头 类型声明与声明类的继承类型有关 app类 每个应用只能有一个 其他细节可阅读官方文档** ## 组件 一个组件可以引用零到多个组件被引用的组件需要在宿主组件注册 组件的引用是静态类型的 也就是一个组件如果对另一个组件多次引用 如果需要隔离必须对每次的引用进行唯一标识 组件 mo.wpy ``` {{text}} {{domain.title}} ``` 页面 test.wpy ``` {{valueText}} ``` > 总结 其实非常类似于VUE 生命周期函数 类似于vue 的钩子函数 如果熟悉VUE的方式 这个应该很容易上手 当然与VUE还有一些不同 可对官方文档进行...
NotFound403 发布于 3天前 阅读 184

「华为云」云中优选惠,全场低至2折,6.19-6.30开抢,签到抽P20

华为云年中钜惠,注册抽免费高配(2核4G)云服务器,单人成团2折起抢购热销云产品;云服务器、数据库、安全防护、大数据等150+云产品,更有精彩好礼送不停!
华为云

微信小程序组件化开发框架wepy 学习(一)

## 技术要求 1.对微信小程序原生开发文档熟悉 2.对前端mvvm有一定的了解 3.会nodejs npm 进行前端组件化开发 ## 框架特点 框架的产生必然是解决开发中的痛点,wepy解决了什么问题? 主要是对原生的开发进行了简化。原生开发中每一个页面要对应四种文件, 而且交互、 数据绑定都十分繁琐 。`wepy`借鉴了`vue`的思想 , 实现了组件化,以组件代替模板和模块, 结构更清晰。同时数据的绑定,api都进行了优化。特别是参数的绑定和监视 都有很大的改观。极大提高了开发效率。 ## 快速入门 环境要求:`nodejs` 环境。 命令行 `node -v` 查看有没有nodejs 环境. `wepy`的安装或更新都通过 `NPM` 进行。 `wepy`版本:最新的`1.7.2`版本 安装wepy 命令行在指定目下执行 `npm install wepy-cli -g` 进行全局配置wepy环境。 安装完毕后 执行` wepy -h` 查看帮助 有位数不多的几个命令: * init \[options\] \[project-name\] generate a new project from a template * build \[options\] build your project list \[options\] list available official templates * upgrade \[options\] upgrade to the latest version * ~~new~~ 其中 `new` 在`1.7.0+` 版本已经废弃 用`init` 代替。...
NotFound403 发布于 4天前 阅读 323

Vue 兼容 ie9 的全面解决方案

## 前言 **背景情况** - vue - 2.5.11 - vue-cli 使用模板 `webpack-simple` - http请求:axios Vue 官方对于 ie 浏览器版本兼容情况的描述是 ie9+,即是 ie9 及更高的版本。经过测试,Vue 的核心框架 `vuejs` 本身,以及生态的官方核心插件(VueRouter、Vuex等)均可以在 ie9 上正常使用。 Vue 的作者尤雨溪对于 [Vue 的学习建议](https://github.com/TerryZ/js-develop-skill-summary/blob/master/vue-base.md#vue2x-%E5%AD%A6%E4%B9%A0%E9%A1%BA%E5%BA%8F%E5%BB%BA%E8%AE%AE) 中有提及为了将项目更好的生态化/工程化,要尽可能学习及使用新的 ECMAScript 规范。目前 ES6/ES2015 是可用度和稳定度较高的规范,文档齐全,国内还有 [阮一峰 《ECMAScript 6 入门》](http://es6.ruanyifeng.com/) 做了大量的文档翻译,开发环境可谓完善。然而版本较旧的浏览器并不支持 es6 规范,尤其是 ie 浏览器,即使是最高的 ie11 版本,对于 es6 规范也支持得并不全。如此则需要对所有原生不支持 ES6 特性的浏览器做兼容性处理。 本文将针对使用 Vue 生态开发完成的网站,以 ie9 版本为基础兼容目标,实现全功能正常使用的全面兼容解决方案。 ## ES6兼容 在 ie9 的环境上,es6 的部分新...
TerryZ 发布于 4天前 阅读 2302 评论 12 点赞 5

Angular 6.0已发版: Angular快速入门

Angular 6.0.0 于2018年5月4日正式发布,今天我们一起来跟着其官网(https://angular.io/guide/quickstart)的例子做个简单入门吧! “Angular 6.0.0 正式发布,新版本重点关注工具链以及工具链在 Angular 中的运...
王永濤 发布于 2周前 阅读 769

如何选择 Web 前端模板引擎?

Web 模板就在那里 模板引擎负责组装数据,以另外一种形式或外观展现数据。 浏览器中的页面是 Web 模板引擎最终的展现。 无论你是否直接使用模板引擎,Web 模板一直都在,不在前端就在后端,它的出现甚至可以追溯到超文本标记语言 HTML 标准正式确立之前。 服务器端的模板引擎 我所知道最早的 Web 模板引擎是 PHP,它正式诞生于 1997 年,工作在服务器端。让我们看看 PHP 官方的 intro-whatis: PHP(“PHP: Hypertext Preprocessor”,超文本预处理器的缩写)是一种被广泛应用的开放源代码的多用途脚本语言,它可嵌入到 HTML中,尤其适合 web 开发。 PHPer 普遍赞同 PHP 本身就是最天然、原生的 PHP 模板引擎,因为她本来就是。在 PHP 的世界里多次出现过再包装的模板引擎,著名的有 smarty。 其它服务器端语言很多都有 HTML 模板引擎,比如 JSP、mustache。 毫无疑问,这些服务器端模板引擎最终生成的结果是 HTML(XML) 字符串,处理流程逻辑使用宿主语言本身的语法实现。 它们的共同特征:HTML 只是个字符串, 最终结果可能还需要类似 Tidy 这样的清洁或修正验证工具。 这里提出一个问题:二次封装的 smarty 有存在的必要么? 浏览器端的模板引擎 我所知道最早的前端...
编辑部的故事 发布于 2周前 阅读 696 评论 6 点赞 4

实现小程序与HTML5应用互转框架之TouchUI-WX推荐

TouchUI-WX
五个半柠檬 发布于 3周前 阅读 718 评论 2 点赞 1

推荐朋友发项目来开源众包吧,成交立享5%的成交额提成!助人为乐还赚钱

有的时候就有那么多的好事
开源中国众包平台 发布于 3周前 阅读 532 评论 4 点赞 1

构建多页的前后分离web项目(alpaca-spa的视图用法)

本文用来介绍使用alpaca-spa构建多页的前后分离项目的js实现。
大弹簧 发布于 4周前 阅读 402

使用Safe.js绑定联动快速开发用户信息页面

这篇文章将会讲解如何使用safe.js快速开发一个web应用程序。 前言 在这篇文章里面,我将简单制作一个用户信息输入的页面 【本文不会讲解safe.js每句代码的具体作用,如果想了解请点击此链接:https://gitee.com/skyogo/Safe/wikis/Safe.js】 开始 首先我们先建立一个Demo.html的文件,里面写上基本结构,并用script标签引入safe.js的文件:(Safe.js Gitee链接:https://gitee.com/skyogo/Safe)【safejs版本必须大于3.1.0】 <!DOCTYPE html> <html> <head> <title>Safe.js Demo</title> <meta charset="UTF-8"> </head> <body> <script src="js/Safe.js"></script> <script> window.onload = function(){ } </script> </body> </html>  然后我们在body标签里面写上以下代码: <input id="nameInput" placeholder="请输入名字:" type="text"> <span id="name">你的名字:<span class="val"></span></span> <br> <br> <hr> <input id="ageInput" placeholder="请输入年龄:" type="text"> <span id="age">你...
Skyogo 发布于 1个月前 阅读 322 评论 3

渐进式Web应用(PWA)入门教程(下)

上篇文章我们对渐进式Web应用(PWA)做了一些基本的介绍。 渐进式Web应用(PWA)入门教程(上) 在这一节中,我们将介绍PWA的原理是什么,它是如何开始工作的。 第一步:使用HTTPS 渐进式Web应用程序需要使用HTTPS连接。虽然使用HTTPS会让您服务器的开销变多,但使用HTTPS可以让您的网站变得更安全,HTTPS网站在Google上的排名也会更靠前。 由于Chrome浏览器会默认将localhost以及127.x.x.x地址视为测试地址,所以在本示例中您并不需要开启HTTPS。另外,出于调试目的,您可以在启动Chrome浏览器的时候使用以下参数来关闭其对网站HTTPS的检查: ·         --user-data-dir ·         --unsafety-treat-insecure-origin-as-secure 第二步:创建一个应用程序清单(Manifest) 应用程序清单提供了和当前渐进式Web应用的相关信息,如: ·         应用程序名 ·         描述 ·         所有图片(包括主屏幕图标,启动屏幕页面和用的图片或者网页上用的图片) 本质上讲,程序清单是页面上用到的图标和主题等资源的元数据。 程序清单是一个位于您应用根目录的JSON文件。该JSON文件返回时必须添加Content-Type: application/manifes...
葡萄城控件技术团队 发布于 1个月前 阅读 485

自定义跨平台比特币实时行情看板

![](https://static.oschina.net/uploads/img/201805/24192235_l9n0.png) ### 一、前言 前段时间跟朋友炒币,总是需要打开交易平台才能看行情,有点麻烦,而且那个窗口也特别大,内容也很杂。所以需要一个简洁的看板。下面是需求。 #### 需求: - 首先是可以看各种币行情的看板 - 关注的币种都不同,所以需要支持自定义交易币种 - 由于大家使用的系统不同,要支持跨平台。 ### 二、方案和工具 #### 方案 简单来讲就是electron套个aicoin插件 分三步: - 用vue来做个设置页面 - 用vue做个看板页面,把aicoin套到vue里 - 用vue-router组合起来放到electron里 #### 主要工具 - electron - vue - element-ui - aicoin ### 三、项目结构 ![输入图片说明](https://static.oschina.net/uploads/img/201805/23170033_Whbk.jpg) #### 主要文件说明 - MainPage用来配置要显示的货币类型 - ShowPage是看板页面 - aicoin是下载到本地的aicoin脚本,因为要翻墙所以先下好 - showcoin是具体显示数据的脚本。 #### electron和vue安装 这个教程比较多,参考[链接](https://github.com/SimulatedGREG/electron-vue),install的时候,建议使用cnpm快一些尤其是electron如果用npm特别慢。 #### 不...
sharpcx 发布于 1个月前 阅读 1271 评论 22 点赞 1 打赏 2

JavaScript成语消消乐

一 预览 二 开发步骤 基本面向过程的思想。没有面向对象的部分。 准备好成语库。db.js 选出每一关的成语。 对成语进行乱序。 初始化表格的同时,将单个字放到每个单元格的按钮上展示。 对tbody进行点击事件的监听。事件函数中获取btn。用变量记录选中的文字。 判断得分、判断下一关、判断游戏结束(成语库毕竟用数组来保存。成语数量有限。) 三 代码 只有两个文件:index.html和db.js 1 index.html代码如下: <!DOCTYPE HTML> <HTML> <head> <meta charset="UTF-8" /> <style> table{ margin:0 auto; width:200px; border:1px solid black; } table button{ width:100%; height:40px; } table td{ width:25%; } table td .selectbtn{ background:blue; color:white; } </style> <script type="text/javascript" src="db.js"></script> </head> <body > <div align="center">成语消消乐</div> <div align="center"> 当前第<font color="green" id="current_level_text">1</font>关  得分<font id="gain_scores_txt" color="green">0</font>分  思考<font id="think_time" color="red">0</font...
点亮LED 发布于 1个月前 阅读 1908 评论 6 点赞 8

使用Safe.js进行快速开发搜索引擎页面实践

这篇文章将会讲解如何使用safe.js快速开发一个web应用程序。在这篇文章里面,我就简单制作一个类似于搜索引擎的页面
Skyogo 发布于 1个月前 阅读 656 评论 6

基于mpvue开发微信小程序,vue能用的,用mpvue哪些情况不能用

在使用mpvue开发过程中,会碰到一些在vue中能使用,结果在mpvue不能正常解析到小程序中的情况,下面就列一下,我在开发过程中遇到的一些情况,不断更新中!
前端大白 发布于 1个月前 阅读 407 点赞 1

老树发新芽—使用 mobx 加速你的 AngularJS 应用

# 老树发新芽—使用 mobx 加速你的 AngularJS 应用 原文: https://github.com/kuitos/kuitos.github.io/issues/38 1月底的时候,Angular 官方博客发布了一则消息: > **AngularJS** is planning one more significant release, version 1.7, and on July 1, 2018 it will enter a 3 year Long Term Support period. 即在 7月1日 AngularJS 发布 1.7.0 版本之后,AngularJS 将进入一个为期 3 年的 LTS 时期。也就是说 2018年7月1日 起至 2021年6月30日,AngularJS 不再合并任何会导致 breaking changes 的 features 或 bugfix,只做必要的问题修复。详细信息见这里:[Stable AngularJS and Long Term Support](https://blog.angular.io/stable-angularjs-and-long-term-support-7e077635ee9c) 看到这则消息时我还是感触颇多的,作为我的前端启蒙框架,我从 AngularJS 上汲取到了非常多的养分。虽然 AngularJS 作为一款优秀的前端 MVW 框架已经出色的完成了自己的历史使命,但考虑到即便到了 2018 年,许多公司基于 AngularJS 的项目依然处于服役阶段,结合我过去一年多在 mobx 上的探索和实践,我决定给 AngularJS 强行再续一波命🙃。(搭车求治拖延症良方,二月初起草的文...
kuitos 发布于 1个月前 阅读 243 评论 1

从零开始搭建webpack+react开发环境

## 环境主要依赖版本 - webpack@4.8.1 - webpack-cli@2.1.3 - webpack-dev-server@3.1.4 - react@16.3.2 - babel-core@6.26.3 - babel-preset-env@1.6.1 - bable-preset-react@6.24.1 ## webpack安装及配置 ### 1. 起步 新建项目目录,初始化npm,新建开发源目录 ``` mkdir webpack-react && cd webpack-react npm init -y mkdir src ``` ### 2.webpack-cli > webpack从4.x版本开始,需要同时安装webpack,webpack-cli(此工具用于在命令行中运行webpack)。 ``` npm install webpack webpack-cli --save-dev ``` ### 3.wepback配置文件 在项目根目录新建webpack.config.js文件,此文件为webpack运行核心文件。 #### webpack.config.js 基本配置 ``` // webpack.config.js const path = require('path'); module.exports = { entry: './src/index.js', // 入口文件 output: { // webpack打包后出口文件 filename: 'app.js', // 打包后js文件名称 path: path.resolve(__dirname, 'dist') // 打包后自动输出目录 } } ``` package.json 文件 scripts配置 ``` "scripts": { "build": "webpack" } ``` 此时在命令行运行npm run build,就能执行webpack了,webpack会自动去找项目根...
会写代码的husky 发布于 1个月前 阅读 639

基于 HTML5 Canvas 的工控机柜 U 位动态管理

工控上运用到机柜 U 位的非常普遍,但是经常在创建 2D/3D 模型的时候,我们向内添加设备,每个设备占的 U 位不同,如果只是单纯地向机柜内部添加节点,在节点还未添加的时候我们没法直观地看到具体的效果,所以我就想能不能在添加的过程中就让大家直接看到设备的 U 位占位以及效果,这个 Demo 因此而生。
xhload3d 发布于 2个月前 阅读 457 评论 1

node.js爬虫应用——前端程序员的词典command-translator

 虽然高考英语考了135分,大学英语四级也过了,可到现在,写了两年代码,经常在写一个变量的时候,想半天也想不出来对应的英文单词是什么,总不能很可 (sha) 爱(bi) 的去用拼音吧,最后还是只能去求助有道了。虽然说打开有道网页,然后输入词语翻译不算太麻烦,担保每次都这样,总觉得不够方便,也不够逼格。  先来看看我现在用的工具好了,首先安装command-translator: `cnpm i -g command-translator`  然后打开一个命令行直接翻译: ```shell tl 翻译 # 输出如下 translate interpret translator interpreter ```  够简单了吧,下面来看看怎么实现的。  在写这个工具之前,我也用过一些插件,如果你用Alfred, 那么你应该已经用过一些翻译插件了。后来我觉得它颜值没有自带的spotlight高,所以就卸载了,然后装了个flashlight, 然而那里面的插件太少了,有一个有道翻译插件,然而只能英文翻译成中文,要它何用?最后打算自己写一个,可折腾了两天后,发现flashlight有问题,似乎是识别不了输入的中文,大概有道那个插件也是遇到这个问题,才没有做中文翻译英文吧。后来想着现在我们一般用vscode比较多,写个vscode插件也不错吧。然而vscode插件的命令中好像是带不了...
孤丶狼丶 发布于 2个月前 阅读 384 评论 2 点赞 3

前端:用css打造炫酷3d特效- css3d立方体

一个三维物体(一个长方体),它围绕着一个轴旋转。我已经有过一些与css 3d一起工作的经验,并且我脑海里开始出现了一个解决方案。我搜索了像“css 3d立方体”这样的关键词来确认我的想法。 对技术感兴趣的朋友可以加我前端学习裙  学习编号:落叶,213126486,一起讨论进步~ 削尖轴 让我提醒你关于浏览器轴的事情。不是战争轴心,而是数字线路.。在三维笛卡尔坐标系中,我们都学到了同样的轴。 三维空间的笛卡尔坐标系是一对垂直的直线(轴)的有序三重奏,所有三个轴都有一个长度单位,每个轴都有一个方向。 维基百科:笛卡尔坐标系 下图显示了如何在浏览器中指向轴。 一种直角坐标系,它指向观察者。(图像信用:维基百科) x轴是水平的,y轴是垂直的,z轴从屏幕内出来。z轴零点值位于屏幕的平面上。记住这个事实。 理清视角 要创建一个3D对象,我需要一个带有透视图的元素(让我们称之为“场景”)。透视图是场景的深度,它取决于它包含的对象的大小。 .scene { perspective: 800px; } 如果透视图太小,物体就会被扭曲。如果它太大,3D效果就会减少到零。 此外,场景中的所有对象只有一个视角。而三维效应则取决于视点位置。 那么,如何计算视角呢?我发现它取决于转动轴。...
落叶_dfg 发布于 2个月前 阅读 418 评论 1

【每天一个JQuery特效】淡入淡出显示或隐藏窗口(1)

我是JQuery新手爱好者,有时间就练练代码,防止手生,争取每天一个JQuery练习,在这个博客记录下学习的笔记。 本特效主要采用fadeIn()和fadeOut()方法显示淡入淡出的显示效果显示或隐藏元素。具体...
Rhymo-Wu 发布于 5天前 阅读 10

使用环形队列触发延时任务

类似需求:“如果连续30s没有请求包(例如登录,消息,keepalive包),服务端就要将这个用户的状态置为离线”。   轮询处理 将所有任务都添加到某集合中,定时轮询扫描,如果达到条件则进行相关处理; let map = new Map(); function doAction(uid) { map.set(uid, new Date().getTime()); } setInterval(function(){ for(let uid of map.keys()) { if(+new Date() - map.get(uid) > 30000) { map.delete(uid); console.log(`${uid}超过30s未做任何操作,设置为离线!`); } } }, 10000); 方案的不足: 效率低下。已经被执行过记录,仍然会被扫描(只是不会出现在结果集中),存在大量的重复计算; 时效性差。时间误差取决于轮询的间隔;如果间隔过小,重复被扫描的次数更高,效率会变得更低下。 定时处理 每来一个任务,启动一个定时器,达到定时器时间,执行相关处理; function doAction(uid) { map.set(uid, new Date().getTime()); setTimeout(function() { console.log(`${uid}超过30s未做任何操作,设置为离线!`); }, 30000); } 方案的不足:     任务过多时占用内存过大   环形队列...
阿豪boy 发布于 2个月前 阅读 42

用Vue.js开发原生应用选择Weex还是NativeScript?

Vue.js是一个很好的框架!它有一个友好的学习曲线,结合了最好的React的组件方法和Angular的模板。尽管如此,Vue.js仍然有一个限制,它还不能像React的React Native,Vue.js目前还没有稳定、广泛采用的方法来开发原生应用程序。 不过,这肯定会改变!目前有两个框架正在开发,可以打开用Vue.js框架创建本地应用程序之门,我们都很喜
笔阁 发布于 2个月前 阅读 85

微信小程序之获取并解密用户数据(获取openid,nickName等)

微信小程序之获取并解密用户数据(获取openid,nickName) 用户性别、所在城市、所在省份、所在国家、用户的语言
小帅帅丶 发布于 2个月前 阅读 578 点赞 1

Puppeteer之爬虫入门

译者按: 本文通过简单的例子介绍如何使用Puppeteer来爬取网页数据,特别是用谷歌开发者工具获取元素选择器值得学习。 原文: A Guide to Automating & Scraping the Web with JavaScript (Chrome + Puppeteer + Node JS) 译者: Fundebug 为了保证可读性,本文采用意译而非直译。另外,本文版权归原作者所有,翻译仅用于学习。 我们将会学到什么? 在这篇文章,你讲会学到如何使用JavaScript自动化抓取网页里面感兴趣的内容。我们将会使用Puppeteer,Puppeteer是一个Node库,提供接口来控制headless Chrome。Headless Chrome是一种不使用Chrome来运行Chrome浏览器的方式。 如果你不知道Puppeteer,也不了解headless Chrome,那么你只要知道我们将要编写JavaScript代码来自动化控制Chrome就行。 准备工作 你需要安装版本8以上的Node,你可以在这里找到安装方法。确保选择Current版本,因为它是8+。 当你将Node安装好以后,创建一个新的文件夹,将Puppeteer安装在该文件夹下。 npm install –save puppeteer 例1:截屏 当你把Puppeteer安装好了以后,我们来尝试第一个简单的例子。这个例子来自于Puppeteer文档(稍微改动)。我们编写的代码将会把你要访问的网页截屏并保存为...
voole 发布于 2个月前 阅读 27

Chrome浏览器禁止缓存

八戒八戒八戒 发布于 2个月前 阅读 16

用AOP改善javascript代码

Aop又叫面向切面编程,用过spring的同学肯定对它非常熟悉,而在js中,AOP是一个被严重忽视的技术点,这篇就通过下面这几个小例子,来说说AOP在js中的妙用. 1, 防止window.onload被二次覆盖. 2,无侵入的统计代码. 3, 分离表单请求和校验. 4,给ajax请求动态添加参数. 5,职责链模式. 6, 组合代替继承. 先给出before和after这2个“切面”函数. 顾名思义,就是让一个函数在另一个函数之前或者之后执行,巧妙的是,before或者after都可以和当前的函数公用this和arguments, 这样一来供我们发挥的地方就多着了. 处理window.onload被二次覆盖. 前段时间看到QQ群里有个人问问题,要改写window.onload, 怎么才能不把以前的window.onload函数覆盖掉. 最原始的方案肯定是直接在原来的window.onload里添上你的新代码. 这样的坏处非常明显,需要去改动原有的函数, 是侵入性最强的一种做法. 另外一种稍微好点的方案是用中间变量保存以前的window.onload; 这样一来,多了一个讨厌的中间变量__onload, 来管理它也要花费一些额外的成本. 试想一下这个场景,当人觉得天气冷,出门的时候很自然选择穿上一件貂皮大衣,而不是把自己的皮扯掉换成貂皮. 动态装饰的好处就体现出来了,完全不会侵入...
呵呵闯 发布于 1个月前 阅读 13

实例:使用puppeteer headless方式抓取JS网页

## puppeteer ## google chrome团队出品的puppeteer 是依赖nodejs和chromium的自动化测试库,它的最大优点就是可以处理网页中的**动态内容**,如JavaScript,能够更好的模拟用户。 有些网站的反爬虫手段是将部分内容隐藏于某些javascript/ajax请求中,致使直接获取a标签的方式不奏效。甚至有些网站会设置隐藏元素“陷阱”,对用户不可见,脚本触发则认为是机器。这种情况下,puppeteer的优势就凸显出来了。 它可实现如下功能: 1. 生成页面的屏幕截图和PDF。 2. 抓取SPA并生成预先呈现的内容(即“SSR”)。 3. 自动表单提交,UI测试,键盘输入等。 4. 创建一个最新的自动化测试环境。使用最新的JavaScript和浏览器功能,直接在最新版本的Chrome中运行测试。 5. 捕获跟踪您网站的时间线,以帮助诊断性能问题。 开源地址:[https://github.com/GoogleChrome/puppeteer/][1] #### 安装 #### ``` npm i puppeteer ``` **注意**先安装nodejs, 并在nodejs文件根目录下执行(npm文件同级)。 安装过程中会下载chromium,大约120M。 用两天(大约10小时)摸索,绕过了相当多的异步的坑,笔者对puppeteer和nodejs有了一定的掌握。 一张长图,抓取blog文章列表: ![输入图片说明](h...
caiyongji 发布于 1个月前 阅读 29

隐藏忽略的文件

packages找到核心包tree-view设置
赤月三号 发布于 1个月前 阅读 6

React实现双向数据绑定

 这是App.js文件的内容: import React, { Component } from 'react'; import './App.css'; import Person from './Person/Person'; class App extends Component { state = { persons: [ { name: "Mrs CoCo", count: 21 }, { name: "Mrs Maomao", count: 31 } ], otherState: "anything" } changeName = (event) =>{ this.setState( { persons: [ { name: event.target.value, count: 23 }, { name: "Mrs Maomao", count: 31 } ] } ); } render() { return ( <div className="App"> <Person changed={this.changeName} name={this.state.persons[0].name} count={this.state.persons[0].count} >我很高兴!!!</Person> </div> ); } } export default App; 这是创建的Person.js文件,在页面上有个输入框,当用户在输入框中输入值,将会触发changed方法,App.js中的changed事件,调用changeName方法,event事件对象可以得到input标签中的内容。 import React from 'react'; // const是定义常量 const Pers...
Mrs_CoCo 发布于 1个月前 阅读 41

ECMAScript学习笔记——Promise对象

摘自阮一峰老师《ECMAScript6入门》一书 /** * 14、Promise 对象 */ //14.1、Promise 的含义 /* Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。它由社区最早提出和实现,ES6 将其写进了语言标准,统一了用法,原生提供了Promise对象。 所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。从语法上说,Promise 是一个对象,从它可以获取异步操作的消息。Promise 提供统一的 API,各种异步操作都可以用同样的方法进行处理。 Promise对象有以下两个特点。 (1)对象的状态不受外界影响。Promise对象代表一个异步操作,有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败)。只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态。这也是Promise这个名字的由来,它的英语意思就是“承诺”,表示其他手段无法改变。 (2)一旦状态改变,就不会再变,任何时候都可以得到这个结果。Promise对象的状态改变,只有两种可能:从pending变为fulfilled和从pending变为rejected。只要这两种情况发生,状态就凝固了,...
万城 发布于 1周前 阅读 9

JavaScript 中 if 条件判断

最近在写前端代码时,经常遇到用if判断是否有值,但有时会忘记if对null、空字符串的判断。这里对if判断做个总结: 输出序号 0 1 2 3 4 5 6 7 8 9 10 11 12 13 变量值 true false 0 0.0 '0' 1 "1" 2 '2'   null 'null' undefined 'undefined' if(变量值)  - if后变量值 true - true false - false false - 0 false - 0 true - 0 true - 1 true - 1 true - 2 true - 2 false - undefined false - null true - null false - undefined true - undefined if(!变量值)  - if后!变量值 false - false true - true true - true true - true false - false false - false false - false false - false false - false true - true true - true false - false true - true false - false   测试代码如下所示: var test = function() { var data = [ true, false, 0, 0.0, '0', 1, "1", 2, '2', , null, 'null', undefined, 'undefined']; for (var i = 0; i < data.length; i++) { if (data[i]) { console.log(i + ' - true - ' + data[i]) } else { console.log(i + ' - false - ' + data[i]) } } for (var i = 0; i < data....
moonlightX 发布于 6天前 阅读 6

React 深入系列1:React 中的元素、组件、实例和节点

>React 深入系列,深入讲解了React中的重点概念、特性和模式等,旨在帮助大家加深对React的理解,以及在项目中更加灵活地使用React。 React 中的元素、组件、实例和节点,是React中关系密切的4个概念,也是很容易让React 初学者迷惑的4个概念。现在,老干部就来详细地介绍这4个概念,以及它们之间的联系和区别,满足喜欢咬文嚼字、刨根问底的同学(老干部就是其中一员)的好奇心。
iKcamp 发布于 3个月前 阅读 8

git cmd git bash

刚用到了Git,看到windows环境下有两个命令输入窗口
东东笔记 发布于 2天前 阅读 3

Clover 文件结构

http://bbs.pcbeta.com/viewthread-1409570-1-1.html 这个帖子是针对config.plist设置的教程 https://jingyan.baidu.com/article/3f16e0031ff8532591c103c3.html这个帖子是编辑用的 http://www.360doc.com/content/14/1103/14/7555793_422170802.shtml系统讲clover知识 BOOT:  ACPI: 存放DSDT.aml/SSDT.aml  CLOVERIA32.efi: 使用传统模式加载32位clover的主启动文件 CLOVERX64.efi: 使用传统模式加载64位clover的主启动文件  config.plist: clover配置文件,相当于变色龙的org.chameleon.boot.plist doc: clover的帮助文档  drivers32: 使用传统模式加载32位clover.efi所需的驱动 (需验证) drivers32UEFI:  使用传统模式加载32位clover.efi在模拟uefi环境下所需的驱动        drivers64: 使用传统模式加载64位clover.efi所需的驱动   (需验证) drivers64UFI: 使用传统模式加载64位clover.efi在模拟uefi环境下所需的驱动 kexts: 使用kexts注入时,kext的存放位置 misc: 使用clover环境下的截图,提取dsdt.aml/ssdt.aml的存放位置 OEM: 分文件夹存放ACPI,config.plist等信息,及加载,实现单个U盘引导多个黑果平台 ROM: 显卡rom存放位置 themes: clover主题...
ziluopao 发布于 3个月前 阅读 19

关于vue中data需要使用闭包返回的原因

Vue.js: Why Components’ Data Properties Must Be Functions Published on May 2, 2017 by Bo Andersen I previously mentioned that with components, the data property must be a function and not an object as we are used to. I have opened up an example of a component which contains a button. <div id="app"> <counter></counter> </div> Vue.component('counter', { template: ` <div> <button @click="counter++">{{ counter }}</button> </div> ` }); new Vue({ el: '#app' }); When clicking it, I want to increase a data property, which I haven’t added yet. Now I want to show you why adding an object for the data property won’t work, so I’ll just go ahead and add an object.   Vue.component('counter', { template: ` <div> <button @click="counter++">{{ counter }}</button> </div> `, data: { counter: 0 } }); If we open the browser’s console, we can see that Vue issues a warning that the property must contain a function, and the component doesn’t work either. Alright, so th...
Littlebox 发布于 2个月前 阅读 97

React Render Props 模式

Render Props模式是一种非常灵活复用性非常高的模式,它可以把特定行为或功能封装成一个组件,提供给其他组件使用让其他组件拥有这样的能力,接下来我们一步一步来看React组件中如何实现这样的功能。
开源中国最帅没有之一 发布于 2个月前 阅读 136

正则表达式--内功心法

在很多业务场景中,我们都会遇到表单校验,条件搜索,数据替换等问题,如何更好的解决问题呢? 正则表达式提供了一条途径,很多人不理解为何一段符号的片段就可以匹配到想要的数据,大多数时候,开发人员都是直接在网上去搜索正则表达式,而不是自己根据业务需求去编写它,... 正则表达式不一定就是完美的方案,因为它也有很多弊端,可能匹配的速度还不如直接字符串搜索来得快。 以下介绍正则表达式如何使用,匹配过程,执行优先级等
华哥_ 发布于 3周前 阅读 539

vue使用mockjs

在使用vue开发的时候,一直疑惑与mockjs怎么用,开了mockjs的开发文档,还是一脸蒙蔽,无从下手!mockjs在前后端分离开发上进行模拟数据,是不可避掉的一环。在网上看了一些博文还有查阅了其文档,终于搞明白了它...
JamesView 发布于 21小时前 阅读 1

前端基础(四):前端国际规范收集

  字数:1142 阅读时间:5分钟   前言 由于前端技术的灵活性和杂乱性,导致网上的许多解决方案不够全面甚至是完全错误,...
老司机带你撸代码 发布于 2天前 阅读 104

微信小程序组件化开发框架wepy 学习(一)

## 技术要求 1.对微信小程序原生开发文档熟悉 2.对前端mvvm有一定的了解 3.会nodejs npm 进行前端组件化开发 ## 框架特点 框架的产生必然是解决开发中的痛点,wepy解决了什么问题? 主要是对原生的开发进行了简化。原生开发中每一个页面要对应四种文件, 而且交互、 数据绑定都十分繁琐 。`wepy`借鉴了`vue`的思想 , 实现了组件化,以组件代替模板和模块, 结构更清晰。同时数据的绑定,api都进行了优化。特别是参数的绑定和监视 都有很大的改观。极大提高了开发效率。 ## 快速入门 环境要求:`nodejs` 环境。 命令行 `node -v` 查看有没有nodejs 环境. `wepy`的安装或更新都通过 `NPM` 进行。 `wepy`版本:最新的`1.7.2`版本 安装wepy 命令行在指定目下执行 `npm install wepy-cli -g` 进行全局配置wepy环境。 安装完毕后 执行` wepy -h` 查看帮助 有位数不多的几个命令: * init \[options\] \[project-name\] generate a new project from a template * build \[options\] build your project list \[options\] list available official templates * upgrade \[options\] upgrade to the latest version * ~~new~~ 其中 `new` 在`1.7.0+` 版本已经废弃 用`init` 代替。...
NotFound403 发布于 4天前 阅读 323

微信小程序组件化开发框架wepy 学习(二)

## 文件 1.文件结构 文件结构类似`VUE`文件 扩展名为 ```.wpy``` ``` ``` 2.文件类型 文件类型声明与` ``` * 声明为page 页面 页面为 无组件页面或者 组件页面 声明类继承 ==wepy.page== ``` ``` * 声明为组件 页面 页面为 无组件页面或者 组件页面 声明类继承 ==wepy.page== ``` ``` >总结: **编译后上述三种类型对应生成各自的原生类型 `json、 wxss、 js、 wxml` 生成文件的文件名与`wpy`文件类名无关。类名仅对引用有关 例如类型为 `Page`的文件 `index.wpy`编译后会生成`index.json、 index.wxss、 index.js、 index.wxml` 类名可自行定义 约定 ==不要以$ _== 开头 类型声明与声明类的继承类型有关 app类 每个应用只能有一个 其他细节可阅读官方文档** ## 组件 一个组件可以引用零到多个组件被引用的组件需要在宿主组件注册 组件的引用是静态类型的 也就是一个组件如果对另一个组件多次引用 如果需要隔离必须对每次的引用进行唯一标识 组件 mo.wpy ``` {{text}} {{domain.title}} ``` 页面 test.wpy ``` {{valueText}} ``` > 总结 其实非常类似于VUE 生命周期函数 类似于vue 的钩子函数 如果熟悉VUE的方式 这个应该很容易上手 当然与VUE还有一些不同 可对官方文档进行...
NotFound403 发布于 3天前 阅读 184

vue 下拉刷新,上拉加载 vue-scroller

git https://github.com/wangdahoo/vue-scroller Demo https://wangdahoo.github.io/vue-scroller/   How to use npm i vue-scroller -S /* ignore this if you include vue-scroller.js by <script> tag from a cdn, such as unpkg */ import Vue from 'vue' import VueScroller from 'vue-scroller' Vue.use(VueScroller) <scroller :on-refresh="refresh" :on-infinite="infinite"> <!-- content goes here --> </scroller>     简单实例   需要注意scrolller的定位方式,以及 <template> <div class="container"> <!--对于scroller默认高度总是占满父容器,虽然可以使用属性设置高度--> <!--但在用一个div包住4会更简单点--> <div style="height: 600px"> <!--scroller组件定位方式用relative 否则会溢出父容器--> <scroller class="scroller" :on-refresh="refresh" :on-infinite="infinite" ref="my_scroller"> <div v-for="(item, index) in items" @click="onItemClick(index, item)" class="row"> {{ item }} </div> </scroller> </d...
阿豪boy 发布于 3个月前 阅读 1483

vue中elementui自定义表头并且添加事件

需求:     自定义表格的表头,然后添加一个checkbox 选中的时候,展示所有的,去掉的时候,不展示所有的     在代码中可以理解为 自定义elementui表格的表头,并且添加事件 渲染是事件   //添加自定义方法 renderProductId <el-table-column show-overflow-tooltip prop="productId" label="照片关联货号" min-width="200" :render-header="renderProductId"> //在渲染表头的时候,会调用此方法,h为createElement的缩写版 添加on.change事件即可 renderProductId(h, {column}) { return h('span', [ h('span', column.label), h('el-checkbox', { style: 'margin-left: 5px;', on: { change: this.change } }), ]); }, change(val) { console.log(val); }     参考: https://segmentfault.com/q/1010000011970694 https://www.cnblogs.com/mengfangui/p/8072842.html http://www.runoob.com/jsref/met-document-createelement.html http://www.w3school.com.cn/xmldom/met_document_createelement.asp...
牛奋Debug 发布于 1个月前 阅读 481

「华为云」云中优选惠,全场低至2折,6.19-6.30开抢,签到抽P20

华为云年中钜惠,注册抽免费高配(2核4G)云服务器,单人成团2折起抢购热销云产品;云服务器、数据库、安全防护、大数据等150+云产品,更有精彩好礼送不停!
华为云

Angular 6.0已发版: Angular快速入门

Angular 6.0.0 于2018年5月4日正式发布,今天我们一起来跟着其官网(https://angular.io/guide/quickstart)的例子做个简单入门吧! “Angular 6.0.0 正式发布,新版本重点关注工具链以及工具链在 Angular 中的运...
王永濤 发布于 2周前 阅读 769

免费好用的节假日API

免费好用,简洁好看的文档。具有TTS接口,可直接返回人类可阅读的中文结果
LanFly 发布于 2个月前 阅读 318 评论 2

小程序判断是否授权

/** * 判断是否有获取用户信息的权限 */ isAuthUserInfo: function () { var that = this; // 可以通过 wx.getSetting 先查询一下用户是否授权了 "scope.userInfo" 这个 scope   wx.getSetting({ success(res) { console.log(res.authSetting['scope.userInfo']) if (!res.authSetting['scope.userInfo']) { wx.authorize({ scope: 'scope.userInfo', success() { // 用户已经同意小程序获取用户信息 wx.getUserInfo();   that.getUserInfo();   res.authSetting = { "scope.userInfo": true, "scope.userLocation": true } }, fail() { wx.showModal({ title: '请授权', content: '需要用户授权才能登录', success: function (res) { if (res.confirm) { console.log('用户点击确定') wx.openSetting({ success: (res) => {   res.authSetting = { "scope.userInfo": true, "scope.userLocation": true }   }, fail() { wx.showModal({ title: '请设置', content: '请设置', }) that.isAuthUserInfo(); } }) } else if (res.cancel) { that.isAuthUserInfo(); } } }) } })   } } }) },...
liop 发布于 2个月前 阅读 473

如何选择 Web 前端模板引擎?

Web 模板就在那里 模板引擎负责组装数据,以另外一种形式或外观展现数据。 浏览器中的页面是 Web 模板引擎最终的展现。 无论你是否直接使用模板引擎,Web 模板一直都在,不在前端就在后端,它的出现甚至可以追溯到超文本标记语言 HTML 标准正式确立之前。 服务器端的模板引擎 我所知道最早的 Web 模板引擎是 PHP,它正式诞生于 1997 年,工作在服务器端。让我们看看 PHP 官方的 intro-whatis: PHP(“PHP: Hypertext Preprocessor”,超文本预处理器的缩写)是一种被广泛应用的开放源代码的多用途脚本语言,它可嵌入到 HTML中,尤其适合 web 开发。 PHPer 普遍赞同 PHP 本身就是最天然、原生的 PHP 模板引擎,因为她本来就是。在 PHP 的世界里多次出现过再包装的模板引擎,著名的有 smarty。 其它服务器端语言很多都有 HTML 模板引擎,比如 JSP、mustache。 毫无疑问,这些服务器端模板引擎最终生成的结果是 HTML(XML) 字符串,处理流程逻辑使用宿主语言本身的语法实现。 它们的共同特征:HTML 只是个字符串, 最终结果可能还需要类似 Tidy 这样的清洁或修正验证工具。 这里提出一个问题:二次封装的 smarty 有存在的必要么? 浏览器端的模板引擎 我所知道最早的前端...
编辑部的故事 发布于 2周前 阅读 696 评论 6 点赞 4

vue 图片引入不显示问题

学习vue 踩坑记录
yanhl 发布于 3个月前 阅读 834

小程序-获取用户信息wx.getUserInfo用法

wx.getUserInfo是一个需要用户授权才能调用的接口,此接口调整过后,直接调用将不再弹出授权弹框。 那么这个变动对于开发的影响在哪里呢?其实影响不大,只是少了一个授权界面而已。至于为什么要去掉这个授权界面,猜测的原因可能是因为业务场景问题,获取用户信息在很多系统中是个必须的步骤,不获取后续操作进行不下去,不能因为用户不同意获取就结束了,因此有了<button open-type="getUserInfo"></button>这个授权按钮   之前的调用逻辑: 直接调起wx.getUserInfo,成功就获取用户信息,失败则通过wx.openSetting打开授权列表,引导授权,不然无法进行后续操作,很显然通过wx.openSetting弹出的页面跟业务场景离得是比较远的 现在的调用逻辑: 有了<button open-type="getUserInfo"></button>这个解决方案,这个授权按钮可以放在页面的任何地方,而且可以多次调出,不像默认的授权界面,用户取消后就不再出现   提示:当用户点击了授权按钮<button open-type="getUserInfo" bindgetuserinfo="callback"></button>后,授权列表对用户的授权就开启自动开启了,以后可以直接通过wx.getUserInfo调用   获取用户信息: <button open-type="getUserInfo" bindgetuserinfo=...
张锦飞 发布于 1个月前 阅读 464

JavaScript成语消消乐

一 预览 二 开发步骤 基本面向过程的思想。没有面向对象的部分。 准备好成语库。db.js 选出每一关的成语。 对成语进行乱序。 初始化表格的同时,将单个字放到每个单元格的按钮上展示。 对tbody进行点击事件的监听。事件函数中获取btn。用变量记录选中的文字。 判断得分、判断下一关、判断游戏结束(成语库毕竟用数组来保存。成语数量有限。) 三 代码 只有两个文件:index.html和db.js 1 index.html代码如下: <!DOCTYPE HTML> <HTML> <head> <meta charset="UTF-8" /> <style> table{ margin:0 auto; width:200px; border:1px solid black; } table button{ width:100%; height:40px; } table td{ width:25%; } table td .selectbtn{ background:blue; color:white; } </style> <script type="text/javascript" src="db.js"></script> </head> <body > <div align="center">成语消消乐</div> <div align="center"> 当前第<font color="green" id="current_level_text">1</font>关  得分<font id="gain_scores_txt" color="green">0</font>分  思考<font id="think_time" color="red">0</font...
点亮LED 发布于 1个月前 阅读 1908 评论 6 点赞 8

vue elementui Cascader 级联选择器 省市区实现

vue elementui Cascader 级联选择器 省市区实现
无知的小孩 发布于 1个月前 阅读 300 评论 1

前端基础(四):前端国际规范收集

  字数:1142 阅读时间:5分钟   前言 由于前端技术的灵活性和杂乱性,导致网上的许多解决方案不够全面甚至是完全错误,...
老司机带你撸代码 发布于 2天前 阅读 104

实现小程序与HTML5应用互转框架之TouchUI-WX推荐

TouchUI-WX
五个半柠檬 发布于 3周前 阅读 718 评论 2 点赞 1

【踩坑之旅】-webpack (v4.8.1) + vue-cli (v2.5.3)升级准备

我天,我是个喜欢折腾新东西的人,看到这些个版本更新这么快,而自己却用这老古董,甚是不悦,故,将此前的github主页项目全盘更新到最新版依赖,这不,问题一波一波过来了,在此记录解决之道,以便下次参考!
Weijuer 发布于 1个月前 阅读 896

el-row的应用

<el-col :span="10"> </el-col> “ ”固定写法,占位符。 利用el-row和el-row。 <el-row> <el-col :span="X"> <el-form-item></.....> </el-col> </el-row> 利用span="X(X=1、2、3、4......)"实现定位,同一行的col span相加最多不能大于24. <el-col :span="14" style="text-align:right"> <el-form :inline="true"> <el-form-item> <el-input v-model="searchcondition" placeholder="请输入账号或公司名称" style="width:300px"></el-input> </el-form-item> <el-form-item> <el-button type="primary" icon="el-icon-search" @click="loadListData(1)"></el-button> </el-form-item> </el-form> </el-col> 此为input输入框和button按钮居右显示。效果如下图所示...
迈克尔丶尼巴 发布于 2个月前 阅读 125

Vue+element图片上传

前言:使用element上传图片之后,文件file下的url是blob:http//localhost:8080地址,后端不好处理 问题如上图所示 采用比较笨的js解决方法,将bolb文件打开,读取src属性(这是一个base64的数据流),把src的内容一起发送给后端。 这是一个上传图片子组件demo <template> <el-upload class="upload-demo" action="" ref="upload" :auto-upload='false' :on-change='changeUpload' accept="image/jpeg,image/gif,image/png,image/bmp"> <div size="small" class="upload_btn"><div style="height:40px"></div><i class="iconfont icon-jiahao"></i><p style="line-height:0">点击上传</p></div> </el-upload> </template> <script> export default { name: 'regShopImg', data () { return { imageUrl: '', imgthing: {} } }, props: ['imgN', 'nameN'], methods: { changeUpload (file, fileList) { console.log(file) // 判断图片大小 if (fileList[0].size < 1100000) { // 判断图片格式是否为jpg,png,jepg,gif var fileName=fileList[0].name // var suffixIndex=fileName.last...
xiaoge2016 发布于 4周前 阅读 114

微信小程序 首页app.userInfoReadyCallback函数的解释

参考链接:https://blog.csdn.net/mr_wuch/article/details/78339146 app.userInfoReadyCallback = res => { this.setData({ userInfo: res.userInfo, hasUserInfo: true }) } ES6的箭头函数 解释:https://segmentfault.com/a/1190000009410939
qimh 发布于 3个月前 阅读 1226

10个用于构建移动应用的Vue.js UI框架

如果你正在考虑使用Vue.js构建移动应用,有许多可用的UI框架可选。在本文中,我们将介绍一些基于Vue.js的框架,这些框架可用于构建多设备混合(Cordova或Phonegap)应用程序以及Native应用程序。
JasonSE 发布于 1个月前 阅读 175

vuejs清空input file中的值

<span class="upload-btn">   <img src="./../../common/images/add-img.png" class="u-img">   <span class="u-tips">添加照片</span>   <input type="file" ref="feedbakcImg" @change="chooseImg" name="file" id="file"> </span> vue 方法体chooseimg中的代码 this.$refs.feedbakcImg.value =''    
谜男amu 发布于 3周前 阅读 97

layer.prompt使文本框为空的情况下也能点击确定

最近一直在使用layui,但是用到弹出层layer.prompt时,如果文本框是空的话点击确定没有反应,不能向下执行。 但是我又需要空值,看看我原来的代码。 1 2 3 4 5 6 7 8 9 layer.prompt({ formType...
孟飞阳 发布于 14小时前

第一次使用最新开发的在线编辑器讲课记录笔记

第一次使用最新开发的在线编辑器讲课记录笔记,效果: 信息地址: http://www.phpkhbd.com/note/93
宁哥实战课堂 发布于 15小时前

js禁用后退事件

//防止页面后退 history.pushState(null, null, document.URL); window.addEventListener('popstate', function () { history.pushState(null, null, document.URL); });...
漫步海边小路 发布于 16小时前

webpack实战(二):真实项目中应用系统配置

字数:2061 阅读时间:15分钟 环境:webpack3.8.1 前言 本文续接文章: webpack实战(一):真实项目中一个完整的webpack配置 上篇文章讲的是框架的配置方案,本文讲的是应用系统的配置方案。 这里,我们先梳理一...
老司机带你撸代码 发布于 16小时前

npm操作报错 _stream_writable.js:61

有一天 不知道什么原因(估计和node的版本有关),无论你做什么npm的操作 都会报错/usr/local/lib/node_modules/npm/node_modules/readable-stream/lib/_stream_writable.js:61 这时候只要执行以下几个命令就可以...
lilugirl 发布于 17小时前

作用域slot

如果父组件需要使用子组件中的内容怎么办,比如父组件需要控制子组件的显示 {{props.item}} 编辑 ...
金于虎 发布于 17小时前 阅读 1 评论 1

Spring Cloud构建微服务架构分布式配置中心

在本文中,我们将学习如何构建一个基于Git存储的分布式配置中心,并对客户端进行改造,并让其能够从配置中心获取配置信息并绑定到代码中的整个过程。 准备配置仓库 准备一个git仓库,可以在码云或Github上创建都可...
明理萝 发布于 17小时前 评论 1

占位slot

一、为什么我们需要slot 假如我们有个需要,子组件中需要显示一段html内容,显示什么不是由子组件决定,而是由父组件传递什么决定,我们该怎么做 很挫的做法,我们使用组件间的数据传递 父组件向子组件传递数据,...
金于虎 发布于 17小时前

生成echarts雷达图并传到Server端生成图片

需求:使用百度的echarts生成雷达图,并上传到服务器端然后处理 使用各个工具: 一、echarts实例及文档,请查看官方地址链接地址 二、html2canvas 代码示例: 一、jsp页面: <%@ page language="java" import=...
凯文加内特 发布于 18小时前

JS onclick 中如何传两个参数给 JS方法

直接传递2个参数。 示例: 1、定义一个js方法 2、onclick传参 传参 这只是一个...
临江仙卜算子 发布于 18小时前

拖动

event
fyliujj 发布于 21小时前

es6 polyfill array

polyfill之javascript函数的兼容写法——Array篇 1. Array.isArray(obj) if (!Array.isArray) { Array.isArray = function(arg) { return Object.prototype.toString.call(arg) === '[object Array]'; }; } 2. A...
球球 发布于 21小时前

js修改img的src属性刷新图片时的图片缓存问题

问题:上传一张图片,通过js更新src属性刷新图片使其即时显示时, 当img的src当前的url与上次地址无变化时(只更改图片,名称不变,不同图片名称相同)图片不变化(仍显示原来的图片) 但通过firebug看图片已经变...
HaierBrother 发布于 21小时前

金额转为千分制,金额转中文大写

金额转关为大写 js /** 数字金额大写转换(可以处理整数,小数,负数) */ function digitUppercase(n){ if(!n) reutrn "" let fraction = ['角', '分']; let digit = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒...
YXMBetter 发布于 21小时前

vue使用mockjs

在使用vue开发的时候,一直疑惑与mockjs怎么用,开了mockjs的开发文档,还是一脸蒙蔽,无从下手!mockjs在前后端分离开发上进行模拟数据,是不可避掉的一环。在网上看了一些博文还有查阅了其文档,终于搞明白了它...
JamesView 发布于 21小时前 阅读 1

控制图片上传宽高

var _URL = window.URL || window.webkitURL; var file, img; if((file = $("#picFile")[0].files[0])) { img = new Image(); img.onload = function() { //如果是首页banner图片,750*180 if($("#addType").val()...
fyliujj 发布于 21小时前

HTTP请求状态及jQuery AJAX请求异常处理

上一周调优一个项目的Js部分,其中一个严重的问题就是在页面初始化数据时,没有对异常进行处理, 导致Loading一直在等待中,无提示无处理。在用户体验上很不好,即使网络条件无法保证,在出错的情况下,也应该 提...
临江仙卜算子 发布于 21小时前

javascript 中 src 和 href 的区别 ?

区别: src用于使用外部资源填充/替换对应的元素。 herf则是建立当前文档和外部资源的联系。 详细分析: href: href(超文本链接)属性指明了一个网络资源的位置,并定义了当前元素(例如一个a标签)或者当前文档(例...
yoler 发布于 22小时前

使用jq 简单实现 文字内容,批量多重替换功能

主要是因为 我本人工作中需要 将 一些文字内容 批量或者多重替换 ,然后 提交到 SVN上面。 也就是 所谓的 代码 改动登记了。 因为代码登记有它的 格式, 所以需要 多重批量 替换文字的功能。 一般的电脑的 或者其...
之渊 发布于 22小时前

相对路径和绝对路径

基本概念   文件路径就是文件在电脑中的位置,表示文件路径的方式有两种,相对路径和绝对路径。在网页设计中通过路径可以表示链接,插入图像、Flash、CSS文件的位置。   物理路径:物理路径就是硬盘上文件的路...
临江仙卜算子 发布于 23小时前 阅读 2

Vue 兼容 ie9 的全面解决方案

## 前言 **背景情况** - vue - 2.5.11 - vue-cli 使用模板 `webpack-simple` - http请求:axios Vue 官方对于 ie 浏览器版本兼容情况的描述是 ie9+,即是 ie9 及更高的版本。经过测试,Vue 的核心框架 `vuejs` 本身,以及生态的官方核心插件(VueRouter、Vuex等)均可以在 ie9 上正常使用。 Vue 的作者尤雨溪对于 [Vue 的学习建议](https://github.com/TerryZ/js-develop-skill-summary/blob/master/vue-base.md#vue2x-%E5%AD%A6%E4%B9%A0%E9%A1%BA%E5%BA%8F%E5%BB%BA%E8%AE%AE) 中有提及为了将项目更好的生态化/工程化,要尽可能学习及使用新的 ECMAScript 规范。目前 ES6/ES2015 是可用度和稳定度较高的规范,文档齐全,国内还有 [阮一峰 《ECMAScript 6 入门》](http://es6.ruanyifeng.com/) 做了大量的文档翻译,开发环境可谓完善。然而版本较旧的浏览器并不支持 es6 规范,尤其是 ie 浏览器,即使是最高的 ie11 版本,对于 es6 规范也支持得并不全。如此则需要对所有原生不支持 ES6 特性的浏览器做兼容性处理。 本文将针对使用 Vue 生态开发完成的网站,以 ie9 版本为基础兼容目标,实现全功能正常使用的全面兼容解决方案。 ## ES6兼容 在 ie9 的环境上,es6 的部分新...
TerryZ 发布于 4天前 阅读 2302 评论 12 点赞 5

如何选择 Web 前端模板引擎?

Web 模板就在那里 模板引擎负责组装数据,以另外一种形式或外观展现数据。 浏览器中的页面是 Web 模板引擎最终的展现。 无论你是否直接使用模板引擎,Web 模板一直都在,不在前端就在后端,它的出现甚至可以追溯到超文本标记语言 HTML 标准正式确立之前。 服务器端的模板引擎 我所知道最早的 Web 模板引擎是 PHP,它正式诞生于 1997 年,工作在服务器端。让我们看看 PHP 官方的 intro-whatis: PHP(“PHP: Hypertext Preprocessor”,超文本预处理器的缩写)是一种被广泛应用的开放源代码的多用途脚本语言,它可嵌入到 HTML中,尤其适合 web 开发。 PHPer 普遍赞同 PHP 本身就是最天然、原生的 PHP 模板引擎,因为她本来就是。在 PHP 的世界里多次出现过再包装的模板引擎,著名的有 smarty。 其它服务器端语言很多都有 HTML 模板引擎,比如 JSP、mustache。 毫无疑问,这些服务器端模板引擎最终生成的结果是 HTML(XML) 字符串,处理流程逻辑使用宿主语言本身的语法实现。 它们的共同特征:HTML 只是个字符串, 最终结果可能还需要类似 Tidy 这样的清洁或修正验证工具。 这里提出一个问题:二次封装的 smarty 有存在的必要么? 浏览器端的模板引擎 我所知道最早的前端...
编辑部的故事 发布于 2周前 阅读 696 评论 6 点赞 4

自定义跨平台比特币实时行情看板

![](https://static.oschina.net/uploads/img/201805/24192235_l9n0.png) ### 一、前言 前段时间跟朋友炒币,总是需要打开交易平台才能看行情,有点麻烦,而且那个窗口也特别大,内容也很杂。所以需要一个简洁的看板。下面是需求。 #### 需求: - 首先是可以看各种币行情的看板 - 关注的币种都不同,所以需要支持自定义交易币种 - 由于大家使用的系统不同,要支持跨平台。 ### 二、方案和工具 #### 方案 简单来讲就是electron套个aicoin插件 分三步: - 用vue来做个设置页面 - 用vue做个看板页面,把aicoin套到vue里 - 用vue-router组合起来放到electron里 #### 主要工具 - electron - vue - element-ui - aicoin ### 三、项目结构 ![输入图片说明](https://static.oschina.net/uploads/img/201805/23170033_Whbk.jpg) #### 主要文件说明 - MainPage用来配置要显示的货币类型 - ShowPage是看板页面 - aicoin是下载到本地的aicoin脚本,因为要翻墙所以先下好 - showcoin是具体显示数据的脚本。 #### electron和vue安装 这个教程比较多,参考[链接](https://github.com/SimulatedGREG/electron-vue),install的时候,建议使用cnpm快一些尤其是electron如果用npm特别慢。 #### 不...
sharpcx 发布于 1个月前 阅读 1271 评论 22 点赞 1 打赏 2

「华为云」云中优选惠,全场低至2折,6.19-6.30开抢,签到抽P20

广告
华为云年中钜惠,注册抽免费高配(2核4G)云服务器,单人成团2折起抢购热销云产品;云服务器、数据库、安全防护、大数据等150+云产品,更有精彩好礼送不停!
华为云

JavaScript成语消消乐

一 预览 二 开发步骤 基本面向过程的思想。没有面向对象的部分。 准备好成语库。db.js 选出每一关的成语。 对成语进行乱序。 初始化表格的同时,将单个字放到每个单元格的按钮上展示。 对tbody进行点击事件的监听。事件函数中获取btn。用变量记录选中的文字。 判断得分、判断下一关、判断游戏结束(成语库毕竟用数组来保存。成语数量有限。) 三 代码 只有两个文件:index.html和db.js 1 index.html代码如下: <!DOCTYPE HTML> <HTML> <head> <meta charset="UTF-8" /> <style> table{ margin:0 auto; width:200px; border:1px solid black; } table button{ width:100%; height:40px; } table td{ width:25%; } table td .selectbtn{ background:blue; color:white; } </style> <script type="text/javascript" src="db.js"></script> </head> <body > <div align="center">成语消消乐</div> <div align="center"> 当前第<font color="green" id="current_level_text">1</font>关  得分<font id="gain_scores_txt" color="green">0</font>分  思考<font id="think_time" color="red">0</font...
点亮LED 发布于 1个月前 阅读 1908 评论 6 点赞 8

使用Remix编译和部署以太坊智能合约

![以太坊remix汇智网](https://static.oschina.net/uploads/img/201804/20113835_7UHh.png "以太坊remix汇智网") Remix 是一个开源的 Solidity 智能合约开发环境,提供基本的编译、部署至本地或测试网络、执行合约等功能。Solidity 是 以太坊Ethereum 官方设计和支持的开发语言,专门用于编写智能合约。 本文希望将一个很简单的代币合约(只能发行和转账),部署在本地和测试网络上,测试下它的功能。 详细描述使用 Remix 的步骤及使用上可能碰到的问题。 之前开发过以太坊Ethereum智能合约,但没有记录过开发的过程和碰到的问题,觉得挺可惜。这次重新开始,从最基础开始,一步步学习。 ### 开发环境 不需要安裝,直接在任何浏览器启动 Remix。 ![以太坊remix汇智网](https://static.oschina.net/uploads/img/201804/20113913_wFJy.png "以太坊remix汇智网") ### 取得代币合约 代币合约的范例很多,Ethereum 官网有提供一个最小可执行的代币合约(MINIMUM VIABLE TOKEN): ``` pragma solidity ^0.4.0; contract MyToken { /* This creates an array with all balances */ mapping (address => uint256) public balanceOf; /* Initializes contract with initial supply ...
笔阁 发布于 2个月前 阅读 1199 评论 2 点赞 2

手把手教你打造一个可视化接口自动化测试系统

现如今,接口开发几乎成为一个互联网公司的标配了,无论是web还是app,哪怕是小程序,都离不开接口作为支撑,当然,这里的接口范围很广,从http到websocket,再到rpc,只要能实现数据通信的都可以称之为接口,面临着如此庞大的接口数据,如果更好的管理和测试他们都是一个比较头疼的问题,更主要的是很多业务场景是需要多个接口进行联调的,因此在接口开发完成后,一轮自动化测试能快速反馈出当前系统的状况,面对这样的需求,一个对测试人员友好的可视化接口自动化测试系统就显得必不可少了。那么,我们今天就来和大家聊聊如何实现一个小型的http接口自动化测试系统! 我们拿DOClever 做为这套系统的范本进行阐述,因为它是开源的,源码随时可以从GitHub和OSChina上获取,同时,这套系统内置了完整的自动化测试框架,从无需一行代码的UI测试用例编写,到更强大更灵活的代码模式,都提供了很友好的支持。 系统需求: 1.   能在一个测试用例里可以对一个接口自由编辑其入参,运行并判断出参是否正确,同时可以查看该接口完整的输入输出数据 2.   能在一个测试用例里可以对一组接口进行测试,自由调整他们的执行顺序,并根据上一接口的出参作为下一接口的入参条件。 3.  ...
ansun123 发布于 2个月前 阅读 2626 点赞 7

合格前端系列第十弹-揭秘组件库一二事

是不是很想自己造一个类似 element-ui,vant,vux 等等优秀的组件库,那你还等什么?跟着我一起开始吧 ~
qiangdada 发布于 3个月前 阅读 2223 评论 4 点赞 11

快速开发 HTML5 WebGL 的 3D 斜面拖拽生成模型

如何在一个斜面上创建 3D 模型?如何通过拖拽创建 3D 模型?这些我们在实际项目中用到的概率也着实不低。我们知道,空间中存在无数个面,一个点和一条法线就能创建一个面,如何利用好这两个部分?
xhload3d 发布于 3个月前 阅读 1692 评论 2

你需要Mobx还是Redux?

在过去一年,越来越多的项目继续或者开始使用React和Redux开发,这是目前前端业内很普遍的一种前端项目解决方案,但是随着开发项目越来越多,越来越多样化时,个人又有了不同的感受和想法。是不是因为已经有了一个比较普遍的,熟悉的项目技术栈,我们就一直完全沿用呢,有没有比他更适合的方案呢?恰逢团队最近有一个新项目,于是博主开始思考,有没有可能使用其他可替代技术开发呢?既能提高开发效率,又能拓展技术储备和眼界,经过调研,选择了Mobx,最终使用React+Mobx搭建了新项目,本篇总结分享从技术选型到项目实现的较完整过程,希望共同进步。
熊建刚 发布于 4个月前 阅读 1034 评论 4 点赞 2

基于 HTML5 WebGL 的 3D 网络拓扑结构图

现在,3D 模型已经用于各种不同的领域。在医疗行业使用它们制作器官的精确模型;电影行业将它们用于活动的人物、物体以及现实电影;视频游戏产业将它们作为计算机与视频游戏中的资源;在科学领域将它们作为化合物的精确模型;建筑业将它们用来展示提议的建筑物或者风景表现;工程界将它们用于设计新设备、交通工具、结构以及其它应用领域;在最近几十年,地球科学领域开始构建三维地质模型,而且 3D 模型经常做成动画,例如,在故事片电影以及计算机与视频游戏中大量地应用三维模型。它们可以在三维建模工具中使用或者单独使用。为了容易形成动画,通常在模型中加入一些额外的数据,例如,一些人类或者动物的三维模型中有完整的骨骼系统,
xhload3d 发布于 5个月前 阅读 2913 评论 3 点赞 7

Token 认证的来龙去脉

Token 是在服务端产生的。如果前端使用用户名/密码向服务端请求认证,服务端认证成功,那么在服务端会返回 Token 给前端。前端可以在每次请求的时候带上 Token 证明自己的合法地位
边城 发布于 5个月前 阅读 6172 评论 40 点赞 31

Vue(三)goods组件开发

### 一、 布局 Flex ##### Flex 布局,可以简便、完整、响应式地实现各种页面布局,Flex 是 Flexible Box 的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性。任何一个容器都可以指定为 Flex 布局。 ``` // 指定为 Flex 布局 display: flex; ``` ``` // 主要属性 flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ] flex属性是flex-grow, flex-shrink 和 flex-basis的简写,默认值为0 1 auto。后两个属性可选。 flex-grow属性定义项目的放大比例,默认为0,即如果存在剩余空间,也不放大 flex-shrink属性定义项目的缩小比例,默认为1,即如果空间不足,该项目将缩小,flex-shrink属性为0,其他项目都为1,则空间不足时,前者不缩小 flex-basis属性定义了在分配多余空间之前,项目占据的主轴空间(main size)。浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为auto,即项目的本来大小,设为跟width或height属性一样的值(比如350px),则项目将占据固定空间 ``` ``` flex : 等分 内容缩放 展位空间; flex : 0 0 80px ``` [Flex 语法](http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html?utm_source=tuicool) [Flex 实践](http:...
前端喵 发布于 5个月前 阅读 2625 评论 3 点赞 1

为什么说Web开发和Vue.js是如此的有趣?

![Web Vue.js](http://upload-images.jianshu.io/upload_images/145564-b44a324d5fd42693?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 我想告诉你,我开始享受使用Vue.js和进行前端开发的故事。这不应该被理解为一篇关于为什么Vue.js可能比React,Angular或任何你正在考虑的其他Web框架更好的文章。Vuejs是令人惊叹的,但我们生活在一个作为前端开发人员同样令人惊叹的时代。 如果你几年前和我交谈过,我会把自己定位为一个后端开发人员,掌握服务器和数据库管理。面向对象的语言,java和c #,我想找到一种自己需要交付程序时使用的唯一的开发语言,我逐渐了解到更多关于.NET和SQL服务器的堆栈技术。当时我有这样一个概念,前端开发者只是使用右脑的附庸风雅的人,并不是“真正的”编程。 但是,在我最后一次求职,选择很少。特别是工作面试,我看到了自己是如何失败的。那次失败非常令人沮丧,但我从中吸取了不少教训。我获得了一个职位,利用了我在SharePoint的经验。我在SharePoint的经验并不特别:用GUI、工作流等设计页面这个不是我理想中的工作,而是为了生活不得不做的工作。 当我刚开始的时候,我接触过像我过去做过的任何类似的项目。我依靠GUI设计用户...
笔阁 发布于 5个月前 阅读 5499 评论 14 点赞 2

前后端分离实践有感

前后端分离并不是什么新鲜事,到处都是前后端分离的实践。然而一些历史项目在从一体化 Web 设计转向前后端分离的架构时,仍然不可避免的会遇到各种各样的问题。由于层出不穷的问题,甚至会有团队质疑,一体化好好的,为什么要前后端分离?
边城 发布于 5个月前 阅读 4416 评论 45 点赞 40

前端性能优化(三) 移动端浏览器前端优化策略

前端性能优化是一个很宽泛的概念,本书前面的部分也多多少少提到一些前端优化方法,这也是我们一直在关注的一件重要事情。配合各种方式、手段、辅助系统,前端优化的最终目的都是提升用户体验,改善页面性能,我们常常竭尽全力进行前端页面优化,但却忽略了这样做的效果和意义。先不急于探究前端优化具体可以怎样去做,先看看什么是前端性能,应该怎样去了解和评价前端页面的性能。
ouven 发布于 6个月前 阅读 2283 评论 3 点赞 5

为什么43%前端开发者想学Vue.js

根据[JavaScript 2017前端库状况调查](https://stateofjs.com/2017/front-end/results/) **Vue.js**是开发者最想学的前端库。我在这里说明一下我为什么认为这也是和你一起通过使用Vue构建一个简单的App应用程序的原因。 我最近曾与Evan You,Chris Fritz,Sarah Drasner,和Adam Jahr做了一个介绍视频,而现在你可以在http://vuejs.org首页找到它。以下是该视频的文字版本。 # 伟大的JavaScript迁移 如你所知,**JavaScript**在过去的10年中已经成熟了很多,而且服务器端正常运行的大部分代码已经迁移到浏览器中了。随着这变得越来越复杂,框架也变得越来越有组织性。 ![为什么43%前端开发者想学Vue.js](http://upload-images.jianshu.io/upload_images/145564-47adf719c305dab3?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 我不打算告诉你为什么一个比另一个更好的,虽然在官方网站有一个详细的比较。 **Vue.js**旨在成为一个平易近人,多功能,高性能,可维护性,可测试的JavaScript框架。Vue的目也是为了进步,意思就是如果你有一个现有的应用程序存在只占一个部分的前端,你需要更多的互动体验那么就可以使用Vue。 或者,您也可以从一开始就在前端构建更多的...
笔阁 发布于 6个月前 阅读 5705 评论 31 点赞 7

JSDuck 与 AngularJS 融合技巧

  字数:1568 阅读时间:10分钟     前言 前面,我们以一个实战案例来详细说明了如何在实际开发中使用JSDuck工具。但是,并不是所有的时候,代码的封装方式都受我们控制的。例如,如果我们使用了现在的几个主流框架AngularJS、React或者Vue的时候,代码的封装方式就必须按照框架定义的方式来构建。当我们的代码中出现了模块、控制器、服务、指令等JSDuck完全不认识的组成部分时,我们该如何使用JSDuck来正确描述我们的代码呢? 那么,下面,笔者就以 AngularJS 为例,来说一说笔者自己的解决方案。     融合思路 解决这个问题,有两种思路。第一种,可以将JSDuck不识别的代码部分映射到工具识别的标签来进行描述。第二种,既然没有现成的标签来描述这些新成员,那我们可以自定义一套标签来描述它们。 第一种方法更方便,不需要额外编码;第二种方法更优雅,但是需要自定义一整套标签。 这里,由于笔者对文档的要求主要是实用,不需要那么完美,而且现在也没有过多的精力来研发一整套标签。所以,笔者选择了第一种解决方案。 第一种方案最核心的地方就是需要确定AngularJS框架给我们的代码带来了哪些新成员,而后如何将这些新成员映射到原有的标签中去。 AngularJS给我...
老司机带你撸代码 发布于 6个月前 阅读 755 评论 1 点赞 2

用Vue.js递归组件构建一个可折叠的树形菜单

![](http://upload-images.jianshu.io/upload_images/145564-1ccbec67a1618829?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 在Vue.js中一个递归组件调用的是其本身,如: ``` Vue.component('recursive-component', {   template: `              ` }); ``` 递归组件常用于在blog上显示注释、嵌套的菜单,或者基本上是父和子相同的类型,尽管具体内容不同。例如: ![](http://upload-images.jianshu.io/upload_images/145564-2b37fc10cb0e5186?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 现在给您演示一下如何有效地使用递归组件,我将通过建立一个可扩展/收缩的树形菜单的来一步步进行。 # 数据结构 一个树状UI的递归组件将是一些递归数据结构的可视化表达。在本教程中,我们将使用树状结构,其中每个节点都是一个对象: 1. 一个 **label** 属性。 2. 如果它有子节点,一个 **nodes** 属性,则它是一个或多个节点的数组属性。 与所有树结构一样,它必须有一个根节点,但可以无限深。 ``` let tree = {   label: 'root',   nodes: [     {       label: 'item1',       nodes: [         {           label: 'item1.1'   ...
笔阁 发布于 6个月前 阅读 2282 评论 3

Webpack自动化构建实践指南

由于现在的博客是使用wordpress搭建,自己得经常修改过一些代码,但是修改第三方源码真的比较痛苦,于是决定计划开始使用React + Node.js / Python开发新博客项目,最终替换当前博客代码,方便以后博客的维护和更新,也能实现自我开发技术,架构设计,解决问题能力的提升,同时记录下整个开发历程,总结,分享,希望能与读者们一起进步。本篇介绍如何使用Webpack和Babel,Eslint,documentation.js等搭建项目开发环境和生产环境,也算项目的准备工作,下一期计划介绍项目的架构设计和技术栈选择。
熊建刚 发布于 6个月前 阅读 1570 评论 4 点赞 3

合格前端系列第八弹-造一个属于自己的 UI 库

轮子总得造上一造~
qiangdada 发布于 6个月前 阅读 3856 评论 9 点赞 8
顶部