├── .gitignore ├── puppeteer ├── index.js ├── browser.js └── gap.js ├── index.js ├── utils ├── index.js ├── jinrishici.js ├── email.js ├── hitokoto.js └── db.js ├── package.json ├── juejin ├── task │ ├── index.js │ ├── read-article.js │ ├── publish-pin.js │ ├── follow-author.js │ ├── digg-pin.js │ ├── digg-article.js │ ├── collect-article.js │ ├── comment-pin.js │ ├── comment-article.js │ └── publish-article.js ├── task.js ├── common.js ├── cookie.js └── api.js ├── config └── index.js ├── .github └── workflows │ └── run.yml ├── growth.js ├── README.md ├── sign.js └── data └── data.json /.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules 2 | .env -------------------------------------------------------------------------------- /puppeteer/index.js: -------------------------------------------------------------------------------- 1 | const { getBrowser, closeBrowser } = require('./browser') 2 | 3 | 4 | module.exports = { 5 | getBrowser, 6 | closeBrowser 7 | } -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | const { signIn } = require('./sign') 2 | const { growth } = require('./growth') 3 | const { closeBrowser } = require("./puppeteer/index") 4 | ; (async () => { 5 | await signIn() 6 | if (!process.env.NOT_GROWTH) { 7 | await growth() 8 | } 9 | await closeBrowser() 10 | })() -------------------------------------------------------------------------------- /utils/index.js: -------------------------------------------------------------------------------- 1 | 2 | // 对象深度合并 3 | const deepMerge = (ops1, ops2) => { 4 | let ops = Object.assign({}, ops1, ops2) 5 | let keys = Object.keys(ops1) 6 | keys.forEach((item) => { 7 | if (typeof ops1[item] === 'object' && !Array.isArray(ops1[item])) { 8 | ops[item] = Object.assign({}, ops1[item], ops2[item] || {}) 9 | } 10 | }) 11 | return ops 12 | } 13 | const getRandomInt = (min, max) => { 14 | return Math.floor(Math.random() * (max - min + 1)) + min; 15 | } 16 | 17 | 18 | module.exports = { 19 | deepMerge, 20 | getRandomInt 21 | } -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "juejin-helper", 3 | "version": "1.0.0", 4 | "description": "稀土掘金助手,包含每日签到,沾喜气,免费抽奖,每日成长任务等", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [ 10 | "掘金", 11 | "juejin", 12 | "掘金签到", 13 | "掘金成长等级" 14 | ], 15 | "author": "https://github.com/chinjiaqing/juejin-helper", 16 | "license": "ISC", 17 | "dependencies": { 18 | "axios": "^0.27.2", 19 | "dotenv": "^16.0.1", 20 | "node-json-db": "^2.1.0", 21 | "nodemailer": "^6.7.7", 22 | "puppeteer": "^15.3.2" 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /utils/jinrishici.js: -------------------------------------------------------------------------------- 1 | const axios = require('axios') 2 | 3 | const getRandomSentence = async () => { 4 | return new Promise(async (r) => { 5 | const defaultWords = `最近大环境好像真的很差哎,以前简历找我的都是一大堆,现在寥寥无几` 6 | const res = await axios.get('https://v1.jinrishici.com/all.json').catch(error => { 7 | return r(defaultWords) 8 | }) 9 | if (res.status == 200) { 10 | const data = res.data 11 | if (data && data.content) { 12 | return r(data.content) 13 | } 14 | } 15 | return r(defaultWords) 16 | }) 17 | } 18 | 19 | module.exports = { 20 | getRandomSentence 21 | } -------------------------------------------------------------------------------- /utils/email.js: -------------------------------------------------------------------------------- 1 | const nodemailer = require("nodemailer"); 2 | const config = require('../config') 3 | const sendEmail = async (params) => { 4 | if (!params || typeof params !== 'object' || !params.to || !params.subject) { 5 | console.log(new Error(`邮件发送失败:参数错误`)) 6 | return 7 | } 8 | 9 | let transporter = nodemailer.createTransport(config.email.provider); 10 | const messageParams = Object.assign({}, params, { 11 | from: config.email.provider.auth.user 12 | }) 13 | await transporter.sendMail(messageParams).catch(err => { 14 | console.log(`邮件发送失败:`) 15 | console.log(err) 16 | }) 17 | } 18 | module.exports = { 19 | sendEmail 20 | } -------------------------------------------------------------------------------- /juejin/task/index.js: -------------------------------------------------------------------------------- 1 | const collectArticle = require("./collect-article") 2 | const diggArticle = require("./digg-article") 3 | const diggPin = require("./digg-pin") 4 | const commentArticle = require("./comment-article") 5 | const commentPin = require("./comment-pin") 6 | const followAuthor = require("./follow-author") 7 | const publishArticle = require("./publish-article") 8 | const publishPin = require("./publish-pin") 9 | const readArticle = require("./read-article") 10 | 11 | 12 | module.exports = { 13 | collectArticle, 14 | diggArticle, 15 | diggPin, 16 | commentArticle, 17 | commentPin, 18 | followAuthor, 19 | publishArticle, 20 | publishPin, 21 | readArticle, 22 | } 23 | -------------------------------------------------------------------------------- /juejin/task/read-article.js: -------------------------------------------------------------------------------- 1 | const { getCookie } = require('../cookie') 2 | const JuejinHttp = require('../api') 3 | const { getArticleList } = require('../common') 4 | // 阅读文章 5 | const readArticle = async task => { 6 | const cookie = await getCookie() 7 | const API = new JuejinHttp(cookie) 8 | const articles = await getArticleList() 9 | const times = task.limit - task.done; //需要执行的次数 10 | console.log(`需要阅读${times}篇文章`) 11 | for (let i = 0; i < times; i++) { 12 | let article = articles[i] 13 | console.log(`阅读文章《${article['article_info']['title']}》`) 14 | await API.growthPointReport(article.article_id) 15 | } 16 | console.log('阅读文章 done') 17 | } 18 | 19 | module.exports = readArticle -------------------------------------------------------------------------------- /utils/hitokoto.js: -------------------------------------------------------------------------------- 1 | const axios = require('axios') 2 | 3 | // https://developer.hitokoto.cn/sentence/#%E7%AE%80%E4%BB%8B 4 | // 一言 随机句子 5 | const getHitokotoWords = async () => { 6 | return new Promise(async (r) => { 7 | const defaultWords = `最近大环境好像真的很差哎,以前简历找我的都是一大堆,现在寥寥无几` 8 | const res = await axios.get('https://v1.hitokoto.cn/').catch(error => { 9 | return r(defaultWords) 10 | }) 11 | if (res.status == 200) { 12 | const data = res.data 13 | if (data && data.hitokoto) { 14 | return r(data.hitokoto) 15 | } 16 | } 17 | return r(defaultWords) 18 | }) 19 | } 20 | 21 | module.exports = { 22 | getHitokotoWords 23 | } -------------------------------------------------------------------------------- /juejin/task/publish-pin.js: -------------------------------------------------------------------------------- 1 | const { getCookie } = require('../cookie') 2 | const JuejinHttp = require('../api') 3 | // const { getRandomSentence } = require('../../utils/jinrishici') 4 | const { getHitokotoWords } = require("../../utils/hitokoto") 5 | // 发布沸点 6 | const pinPublish = async task => { 7 | const cookie = await getCookie() 8 | const API = new JuejinHttp(cookie) 9 | const times = task.limit - task.done; //需要执行的次数 10 | console.log(`需要发布${times}篇沸点`) 11 | for (let i = 0; i < times; i++) { 12 | // 获取随机一句古诗词 13 | const words = await getHitokotoWords() 14 | const pinRes = await API.pinPublish(words) 15 | // 删除刚发布的沸点 16 | // await API.pinRemove(pinRes['msg_id']) 17 | } 18 | console.log(`发布沸点 done`) 19 | } 20 | 21 | module.exports = pinPublish -------------------------------------------------------------------------------- /config/index.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config() 2 | 3 | module.exports = { 4 | // 这里的邮箱配置以网易邮箱为例,qq邮箱端口和host等均会有差异 具体可以留言提问或百度 5 | email: { 6 | provider: { 7 | auth: { 8 | user: process.env.EMAIL_USER, // 你的网易邮箱账号 9 | pass: process.env.EMAIL_PASS, // 你的网易邮箱 smpt 授权码 10 | }, 11 | host: 'smtp.163.com', 12 | secure: true, 13 | port: 465, 14 | secureConnection: true 15 | } 16 | }, 17 | juejin: { 18 | login: 'https://juejin.cn/login', 19 | loginApi: '/passport/web/user/login', 20 | verifyApi: 'verify.snssdk.com/captcha/verify', 21 | }, 22 | user: { 23 | mobile: process.env.USER_MOBILE, //你的掘金登录手机号 24 | password: process.env.USER_PASSWORD, // 你的掘金登录密码 25 | email: process.env.USER_EMAIL, // 你的接收通知的邮箱 26 | }, 27 | } -------------------------------------------------------------------------------- /juejin/task/follow-author.js: -------------------------------------------------------------------------------- 1 | const { getCookie } = require('../cookie') 2 | const JuejinHttp = require('../api') 3 | //关注用户 4 | const followAuthor = async task => { 5 | const cookie = await getCookie() 6 | const API = new JuejinHttp(cookie) 7 | const authors = await API.getRecommendAuthors() 8 | const list = authors.filter(v => v.isfollowed === false) 9 | if (list.length == 0) { 10 | console.log(`获取推荐用户失败[r1]`) 11 | return 12 | } 13 | 14 | const times = task.limit - task.done; //需要执行的次数 15 | console.log(`需要关注${times}位用户`) 16 | for (let i = 0; i < times; i++) { 17 | const author = list[i] || false 18 | if (!author) break; 19 | const { user_name, user_id } = author 20 | await API.toggleFollowAuthor(user_id, true) 21 | // 取消关注 22 | // await API.toggleFollowAuthor(author['user_id'], false) 23 | } 24 | console.log(`关注用户 done`) 25 | } 26 | 27 | module.exports = followAuthor -------------------------------------------------------------------------------- /utils/db.js: -------------------------------------------------------------------------------- 1 | const { JsonDB } = require('node-json-db'); 2 | const { Config } = require('node-json-db/dist/lib/JsonDBConfig') 3 | const path = require('path') 4 | const db = new JsonDB(new Config(path.join(__dirname, '../data/data'), true, true, '/')) 5 | 6 | 7 | const insertTo = (dbKey, ...params) => { 8 | return new Promise(async (r, j) => { 9 | try { 10 | await db.push(dbKey, ...params, false) 11 | await db.save() 12 | r() 13 | } catch (error) { 14 | console.log(error) 15 | r() 16 | } 17 | }) 18 | } 19 | 20 | const dbGet = (key, isArray = true) => { 21 | return new Promise(async r => { 22 | try { 23 | const data = await db.getData(key) 24 | r(data) 25 | } catch (error) { 26 | r(isArray ? [] : null) 27 | } 28 | }) 29 | } 30 | insertTo('/homepage', 'https://github.com/chinjiaqing/juejin-helper') 31 | module.exports = { 32 | db, 33 | insertTo, 34 | dbGet 35 | } -------------------------------------------------------------------------------- /juejin/task.js: -------------------------------------------------------------------------------- 1 | const { 2 | collectArticle, 3 | diggArticle, 4 | diggPin, 5 | commentArticle, 6 | commentPin, 7 | followAuthor, 8 | publishArticle, 9 | publishPin, 10 | readArticle, 11 | } = require("./task/index") 12 | 13 | const handleTask = async task => { 14 | const id = task.task_id 15 | if (id == 13) { 16 | await readArticle(task) 17 | } 18 | if (id == 9) { 19 | await diggArticle(task) 20 | } 21 | if (id == 12) { 22 | await collectArticle(task) 23 | } 24 | if (id == 11) { 25 | await followAuthor(task) 26 | } 27 | if (id == 7) { 28 | await commentArticle(task) 29 | } 30 | if (id == 8) { 31 | await commentPin(task) 32 | } 33 | if (id == 10) { 34 | await diggPin(task) 35 | } 36 | if (id == 6) { 37 | await publishPin(task) 38 | } 39 | if (id == 5) { 40 | await publishArticle(task) 41 | } 42 | } 43 | 44 | 45 | module.exports = { 46 | handleTask 47 | } -------------------------------------------------------------------------------- /juejin/task/digg-pin.js: -------------------------------------------------------------------------------- 1 | // 沸点点赞 2 | const { getCookie } = require('../cookie') 3 | const JuejinHttp = require('../api') 4 | const { saveComments } = require('../common') 5 | const pinDigg = async task => { 6 | const cookie = await getCookie() 7 | const API = new JuejinHttp(cookie) 8 | const articles = await API.getRecommendPins() 9 | const list = articles.filter(v => v.user_interact && v.user_interact.is_digg === false) 10 | if (list.length == 0) { 11 | console.log(`获取沸点列表失败[f2]`) 12 | return 13 | } 14 | const times = task.limit - task.done; //需要执行的次数 15 | console.log(`需要点赞${times}篇沸点`) 16 | for (let i = 0; i < times; i++) { 17 | const article = list[i] || list[0] 18 | const { msg_id, content } = article['msg_Info'] 19 | await saveComments(msg_id, 4) 20 | await API.diggSave(article['msg_id'], 4) 21 | // 取消点赞 22 | // await API.diggCancel(article['msg_id'], 4) 23 | } 24 | console.log(`点赞沸点 done`) 25 | } 26 | 27 | module.exports = pinDigg -------------------------------------------------------------------------------- /puppeteer/browser.js: -------------------------------------------------------------------------------- 1 | const puppeteer = require('puppeteer') 2 | const getBrowser = async (options) => { 3 | if (!global._browser) { 4 | try { 5 | const browser = await puppeteer.launch(Object.assign({}, 6 | options, { 7 | headless: true, 8 | ignoreDefaultArgs: ['--disable-extensions'], 9 | args: [ 10 | '--no-sandbox', '--disable-setuid-sandbox', 11 | '--use-gl=egl', 12 | '--disable-web-security', 13 | '--disable-features=IsolateOrigins,site-per-process', 14 | ] 15 | })); 16 | global._browser = browser 17 | } catch (error) { 18 | console.log(error.message || 'puppeteer启动失败') 19 | } 20 | } 21 | 22 | return global._browser || null 23 | } 24 | 25 | const closeBrowser = async () => { 26 | if (global._browser) { 27 | await global._browser.close() 28 | global._browser = null 29 | } 30 | } 31 | module.exports = { 32 | getBrowser, 33 | closeBrowser 34 | } -------------------------------------------------------------------------------- /juejin/task/digg-article.js: -------------------------------------------------------------------------------- 1 | // 点赞文章 2 | const { getCookie } = require('../cookie') 3 | const JuejinHttp = require('../api') 4 | const { getArticleList, saveComments } = require('../common') 5 | const { insertTo, dbGet } = require("../../utils/db") 6 | const articleDigg = async task => { 7 | const cookie = await getCookie() 8 | const API = new JuejinHttp(cookie) 9 | const articles = await getArticleList() 10 | // 筛选未点赞过的文章 11 | const list = articles.filter(v => v.user_interact && v.user_interact.is_digg === false) 12 | if (list.length == 0) { 13 | console.log(`获取文章列表失败[d1]`) 14 | return 15 | } 16 | const times = task.limit - task.done; //需要执行的次数 17 | console.log(`需要点赞${times}篇文章`) 18 | for (let i = 0; i < times; i++) { 19 | const article = list[i] || list[0] 20 | const { article_id, title } = article['article_info'] 21 | await saveComments(article_id) 22 | await API.diggSave(article_id) 23 | // 取消点赞 24 | // await API.diggCancel(article['article_id']) 25 | } 26 | console.log(`点赞文章 done`) 27 | } 28 | 29 | module.exports = articleDigg -------------------------------------------------------------------------------- /juejin/task/collect-article.js: -------------------------------------------------------------------------------- 1 | const { getCookie } = require('../cookie') 2 | const JuejinHttp = require('../api') 3 | const { getArticleList } = require('../common') 4 | // 阅读文章 5 | const articleCollect = async task => { 6 | const articles = await getArticleList() 7 | const list = articles.filter(v => v.user_interact && v.user_interact.is_collect === false) 8 | if (list.length == 0) { 9 | console.log(`获取文章列表失败[d1]`) 10 | return 11 | } 12 | const cookie = await getCookie() 13 | const API = new JuejinHttp(cookie) 14 | const collectionList = await API.getMyCollectionset() 15 | if (collectionList.length == 0) { 16 | console.log(`获取收藏集失败`) 17 | return 18 | } 19 | // 取第一个收藏集 一般为默认 收藏集 20 | const { collection_id, collection_name } = collectionList[0] 21 | const times = task.limit - task.done; //需要执行的次数 22 | console.log(`需要收藏${times}篇文章`) 23 | for (let i = 0; i < times; i++) { 24 | const article = list[i] || list[0] 25 | const { article_id, title } = article['article_info'] 26 | await API.articleCollectAdd(article_id, collection_id) 27 | // await API.articleCollectRemove(article_id) 28 | } 29 | console.log(`收藏文章 done`) 30 | } 31 | module.exports = articleCollect -------------------------------------------------------------------------------- /.github/workflows/run.yml: -------------------------------------------------------------------------------- 1 | name: 掘金日常 2 | permissions: 3 | contents: write 4 | on: 5 | schedule: 6 | # 执行两次 避免偶尔执行失败的情况出现 7 | - cron: "15 22 * * *" 8 | - cron: "30 23 * * *" 9 | push: 10 | branches: 11 | - main 12 | - master 13 | 14 | # pull_request: 15 | # branches: [ master,main ] 16 | 17 | jobs: 18 | build: 19 | runs-on: ubuntu-latest 20 | # if: github.event.repository.owner.id == github.event.sender.id 21 | 22 | strategy: 23 | matrix: 24 | node-version: [16.x] 25 | 26 | steps: 27 | - uses: actions/checkout@v3 28 | - name: Use Node.js 16.x 29 | uses: actions/setup-node@v3 30 | with: 31 | node-version: '16.x' 32 | - name: npm包安装 33 | run: npm ci 34 | - name: 开始任务 35 | env: 36 | EMAIL_USER: ${{ secrets.EMAIL_USER }} 37 | EMAIL_PASS: ${{ secrets.EMAIL_PASS }} 38 | USER_MOBILE: ${{ secrets.USER_MOBILE }} 39 | USER_PASSWORD: ${{ secrets.USER_PASSWORD }} 40 | USER_EMAIL: ${{ secrets.USER_EMAIL }} 41 | run: | 42 | node index.js 43 | - name: 更新数据 44 | uses: JamesIves/github-pages-deploy-action@4.0.0 45 | with: 46 | branch: main 47 | folder: . 48 | -------------------------------------------------------------------------------- /juejin/common.js: -------------------------------------------------------------------------------- 1 | // 获取最新文章列表 2 | const { getCookie } = require('./cookie') 3 | const JuejinHttp = require('./api') 4 | const { insertTo, dbGet } = require("../utils/db") 5 | const COMMENTS_MAX_LENGTH = 10000 6 | // 获取文章列表 7 | // 300最新 200 为 默认 8 | const getArticleList = async (sort_type) => { 9 | const cookie = await getCookie() 10 | const API = new JuejinHttp(cookie) 11 | const list = await API.getRecommendArticles(sort_type).catch(err => { 12 | console.log(err) 13 | }) 14 | const articles = [] 15 | list.map(v => { 16 | if (v.item_type == 2) { 17 | articles.push(v.item_info) 18 | } 19 | }) 20 | return articles || [] 21 | } 22 | 23 | // 2 为 文章, 4为沸点 24 | const saveComments = async (item_id, type = 2) => { 25 | const dbKey = type == 2 ? '/comments/article' : '/comments/pin' 26 | const cookie = await getCookie() 27 | const API = new JuejinHttp(cookie) 28 | const commentItems = await API.getArticleComments(item_id, type) 29 | const commentWords = commentItems.map(v => v.comment_info.comment_content) 30 | const dbComments = await dbGet(dbKey) 31 | if (dbComments && dbComments.length >= COMMENTS_MAX_LENGTH) return 32 | for (let item of commentWords) { 33 | // 获取当前文章的评论并存到文件 34 | if (!dbComments || !dbComments.includes(item)) { 35 | await insertTo(dbKey + '[]', item) 36 | } 37 | } 38 | } 39 | 40 | 41 | module.exports = { 42 | getArticleList, 43 | saveComments 44 | } -------------------------------------------------------------------------------- /juejin/task/comment-pin.js: -------------------------------------------------------------------------------- 1 | // 沸点评论 2 | const { getCookie } = require('../cookie') 3 | const JuejinHttp = require('../api') 4 | // const { getRandomSentence } = require('../../utils/jinrishici') 5 | const { getHitokotoWords } = require("../../utils/hitokoto") 6 | const { insertTo, dbGet } = require("../../utils/db") 7 | const { getRandomInt } = require("./../../utils/index") 8 | const { saveComments } = require("../common") 9 | 10 | const pinComment = async task => { 11 | const cookie = await getCookie() 12 | const API = new JuejinHttp(cookie) 13 | const pins = await API.getRecommendPins() 14 | if (pins.length == 0) { 15 | console.log(`获取沸点列表失败[d1]`) 16 | return 17 | } 18 | const times = task.limit - task.done; //需要执行的次数 19 | console.log(`需要评论${times}篇沸点`) 20 | for (let i = 0; i < times; i++) { 21 | const article = pins[i] || pins[0] 22 | // 随机评论一句古诗 23 | const { msg_id, content } = article['msg_Info'] 24 | await saveComments(msg_id, 4) 25 | const newDbComments = await dbGet('/comments/pin') 26 | const word = await getHitokotoWords() 27 | const comments = [word].concat(newDbComments || []) 28 | const index = getRandomInt(0, comments.length - 1) 29 | const words = comments[index] || word 30 | const comment = await API.articleCommentAdd(msg_id, words, 4) 31 | // 删除评论 32 | // await API.articleCommentRemove(comment['comment_id']) 33 | } 34 | console.log(`评论沸点 done`) 35 | } 36 | 37 | module.exports = pinComment -------------------------------------------------------------------------------- /growth.js: -------------------------------------------------------------------------------- 1 | 2 | const JuejinHttp = require('./juejin/api') 3 | const { getCookie } = require('./juejin/cookie') 4 | const { handleTask } = require("./juejin/task") 5 | const { sendEmail } = require(`./utils/email`) 6 | const config = require("./config/index") 7 | 8 | const growth = async () => { 9 | try { 10 | const cookie = await getCookie() 11 | const API = new JuejinHttp(cookie) 12 | const { growth_tasks = {} } = await API.getTaskList() 13 | const data = Object.values(growth_tasks) 14 | let taskHasDone = 0 15 | for (let items of data) { 16 | for (let task of items) { 17 | if (task.limit > 0 && task.done < task.limit && ![4, 15, 16].includes(task.task_id)) { 18 | console.log(`---开始任务:<${task.title}> ---`) 19 | await handleTask(task) 20 | taskHasDone += 1 21 | } 22 | } 23 | } 24 | 25 | const { today_jscore } = await API.getTaskList() 26 | console.log(`成长任务已完成, 今日掘友分+${today_jscore}`) 27 | if (taskHasDone > 0) { 28 | await sendEmail({ 29 | to: config.user.email, 30 | text: `成长任务已完成, 今日掘友分+${today_jscore}`, 31 | subject: '【掘金】上分成功' 32 | }) 33 | } 34 | } catch (err) { 35 | console.log(err) 36 | await sendEmail({ 37 | to: config.user.email, 38 | text: `任务失败:${err.message}`, 39 | subject: '【掘金】上分失败' 40 | }) 41 | } 42 | 43 | } 44 | 45 | 46 | // growth() 47 | 48 | module.exports = { 49 | growth 50 | } -------------------------------------------------------------------------------- /juejin/task/comment-article.js: -------------------------------------------------------------------------------- 1 | // 文章评论 2 | const { getCookie } = require('../cookie') 3 | const JuejinHttp = require('../api') 4 | const { getArticleList, saveComments } = require('../common') 5 | const { getRandomInt } = require("./../../utils/index") 6 | const { insertTo, dbGet } = require("../../utils/db") 7 | const articleComment = async task => { 8 | const cookie = await getCookie() 9 | const API = new JuejinHttp(cookie) 10 | const articles = await getArticleList(200) 11 | if (articles.length == 0) { 12 | console.log(`获取文章列表失败[d1]`) 13 | return 14 | } 15 | const times = task.limit - task.done; //需要执行的次数 16 | console.log(`需要评论${times}篇文章`) 17 | const defaultComments = [ 18 | `感谢,学习了,受益颇多`, 19 | '竟然还能这样,妙啊!', 20 | '学到了', 21 | '听君一席话,如同听君一席话', 22 | '我虽然看不懂,但我大受震撼', 23 | '已阅', 24 | '666', 25 | '收藏了', 26 | 'mark', 27 | '怎么做才能像你一样优秀?真让人头疼' 28 | ] 29 | for (let i = 0; i < times; i++) { 30 | const article = articles[i] || false 31 | if (!article) break; 32 | const { article_id, title } = article['article_info'] 33 | await saveComments(article_id, 2) 34 | const newDbComments = await dbGet('/comments/article') 35 | const comments = defaultComments.concat(newDbComments || []) 36 | const index = getRandomInt(0, comments.length - 1) 37 | const words = defaultComments[index] || defaultComments[0] 38 | const comment = await API.articleCommentAdd(article_id, words) 39 | // 删除评论 40 | // await API.articleCommentRemove(comment['comment_id']) 41 | } 42 | console.log(`评论文章 done`) 43 | } 44 | 45 | module.exports = articleComment -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | 🏵️ 掘金助手 3 |

4 |

5 | 签到应该是没问题的,就是刷成长等级有封号风险,慎用,就这样吧,也没时间更新了。 6 |

7 |

8 | 无需复制 cookie,直接部署后托管就行,懂我意思吧 9 |

10 | 11 |
12 | 13 | ![008hT4DMly1gwphdd018zg306y068axz.gif](https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/c5f74af8f821447f8ca4eae1c96d29d9~tplv-k3u1fbpfcp-watermark.image?) 14 | 15 |
16 | 17 | ## 功能清单 18 | 19 | - 每日签到 20 | - 每日沾喜气 21 | - 每日免费抽奖 22 | - 每日成长任务 23 | - 邮件通知 24 | 25 | ## 【new】成长任务说明 26 | 27 | **发布文章,发布评论,点赞等相关操作都会有的对应的删除和取消操作,避免污染账号。** 28 | 29 | - 2022/08/02 删除会被扣分,这个就自己根据情况手动删除吧 30 | 31 | ## 使用 github workflows 进行托管 32 | 33 | [https://github.com/chinjiaqing/juejin-helper](https://github.com/chinjiaqing/juejin-helper) 34 | 35 | **大约在每天的北京时间 8:00 左右执行** 36 | 37 | 1. Fork 仓库 38 | 39 | 2. 在仓库 `Settings->Secrets->Actions`中添加如下几个变量: 40 | 41 | | NAME | VALUE | 42 | | ------------- | ------------------------------ | 43 | | EMAIL_USER | 发送邮件的邮箱账号 | 44 | | EMAIL_PASS | 发送邮件的授权码 | 45 | | USER_MOBILE | 掘金账号 - 手机号 | 46 | | USER_PASSWORD | 掘金账号 - 密码 | 47 | | USER_EMAIL | 接收通知的邮箱账号 | 48 | | NOT_GROWTH | 是否执行成长任务(不填写则执行) | 49 | 50 | 3. 在 `Settings->Actions`确保 actions 是开启状态 51 | 52 | 4. 关于发送邮件通知,本项目通知使用的是网易 163 邮箱,如果你想使用其他邮件服务商进行推送,记得在`config.js`的`email.provider`选项中进行配置修改 53 | 54 | - [网易邮箱-POP3/SMTP/IMAP](https://help.mail.163.com/faq.do?m=list&categoryID=90) 55 | - [nodemailer 参考手册](https://www.npmjs.com/package/nodemailer) 56 | 57 | ## 本地开发调试 58 | 59 | 1. clone 本仓库 60 | 2. 在项目根目录新建 `.env` 文件,内容如下: 61 | 62 | ``` 63 | # 发送邮件的邮箱账号 64 | EMAIL_USER="" 65 | 66 | # 发送邮件的授权码 67 | EMAIL_PASS="" 68 | 69 | # 掘金账号 - 手机号 70 | USER_MOBILE="" 71 | 72 | # 掘金账号 - 密码 73 | USER_PASSWORD="" 74 | 75 | # 接收通知的邮箱账号 76 | USER_EMAIL="" 77 | ``` 78 | 79 | 3. `npm install` 安装完依赖后,执行 `node index` 即可 80 | 81 | 4. 在`puppeteer/browser.js` 中 配置 `headless:false` 可显示浏览器界面(部署时记得改为 true) 82 | 83 | 84 | -------------------------------------------------------------------------------- /sign.js: -------------------------------------------------------------------------------- 1 | const JuejinHttp = require('./juejin/api') 2 | const config = require("./config/index") 3 | const { getCookie } = require('./juejin/cookie') 4 | const { sendEmail } = require(`./utils/email`) 5 | const signIn = async () => { 6 | try { 7 | const cookie = await getCookie() 8 | if (!cookie) { 9 | throw new Error(`获取cookie失败`) 10 | } 11 | const API = new JuejinHttp(cookie) 12 | const isCheckIn = await API.queryTodayStatus() 13 | let lotteryName = '' 14 | if (isCheckIn) { 15 | console.log(`今日已签到`) 16 | return 17 | } else { 18 | await API.handleCheckIn() 19 | console.log(`签到成功`) 20 | } 21 | const userInfo = await API.queryUserProfile() 22 | const { free_count } = await API.queryLotteryConfig() 23 | if (!free_count) { 24 | console.log(`今日已免费抽奖`) 25 | } else { 26 | const { lotteries } = await API.queryLuckyList() 27 | const luckyId = lotteries && lotteries[0] ? lotteries[0]['history_id'] : 0 28 | const { has_dip, dip_action, total_value } = await API.handleDipLucky(luckyId) 29 | if (has_dip) { 30 | console.log(`今日已沾过喜气`) 31 | } 32 | if (dip_action === 1) { 33 | console.log(`沾喜气成功`) 34 | } 35 | console.log(`当前喜气值:${total_value}`) 36 | const { lottery_name } = await API.handleLotteryDraw() 37 | lotteryName = lottery_name 38 | console.log(`抽奖成功:${lotteryName}`) 39 | } 40 | const totalPoint = await API.queryTotalPoint() 41 | console.log(`当前矿石:${totalPoint}`) 42 | console.log(`签到成功`) 43 | await sendEmail({ 44 | to: config.user.email, 45 | text: `签到成功,拥有矿石:${totalPoint}`, 46 | subject: '【掘金】签到成功' 47 | }) 48 | } catch (err) { 49 | console.log(`签到失败`) 50 | console.log(err) 51 | await sendEmail({ 52 | to: config.user.email, 53 | text: `签到失败:${err.message}`, 54 | subject: '【掘金】签到失败' 55 | }) 56 | 57 | } 58 | } 59 | 60 | module.exports = { 61 | signIn 62 | } -------------------------------------------------------------------------------- /puppeteer/gap.js: -------------------------------------------------------------------------------- 1 | // 计算登录滑块的移动距离 2 | const calcGapPosition = async (page, src) => { 3 | const distance = await page.evaluate(async (src) => { 4 | const findMost2 = (arr) => { 5 | // 定义一个空对象存储数据 6 | var h = {}; 7 | // 假设频率高的数出现次数初始为0 8 | var maxNum = 0; 9 | // 清空频率高的数 10 | var maxEle = null; 11 | // 对数组从左往右遍历 12 | for (var i = 0; i < arr.length; i++) { 13 | // 对数组的每一个数据进行存储存于a 14 | var a = arr[i]; 15 | // 判断存储的数字是否为默认值, 存在 对属性的值进行+1,不存在 往对象中重新添加属性赋值为1; 16 | h[a] === undefined ? h[a] = 1 : (h[a]++); 17 | // 判断存入的数据是否大于初始的频率高数,如果满足将存入高频数和出现次数的覆盖前一次的。 18 | if (h[a] > maxNum) { 19 | maxEle = a; 20 | maxNum = h[a]; 21 | } 22 | } 23 | return { 24 | times: maxNum, 25 | value: maxEle 26 | } 27 | } 28 | const imageLoaded = (document, src) => { 29 | return new Promise((r, j) => { 30 | const image = document.createElement('img') 31 | image.setAttribute('src', src) 32 | image.crossOrigin = "Anonymous"; 33 | image.addEventListener('load', () => { 34 | r(image) 35 | }) 36 | image.addEventListener('error', () => { 37 | j() 38 | }) 39 | }) 40 | } 41 | const image = await imageLoaded(document, src).catch(err => { 42 | console.log('图片加载失败') 43 | }) 44 | const canvas = document.createElement('canvas') 45 | canvas.width = image.width 46 | canvas.height = image.height 47 | const ctx = canvas.getContext('2d') 48 | ctx.drawImage(image, 0, 0) 49 | const imageInfo = ctx.getImageData(0, 0, image.width, image.height) 50 | const imageData = imageInfo.data; 51 | const gap = 1; 52 | let positionX = [] 53 | for (var h = 0; h < image.height; h += gap) { 54 | for (var w = 0; w < image.width; w += gap) { 55 | var position = (image.width * h + w) * 4; 56 | var r = imageData[position], g = imageData[position + 1], b = imageData[position + 2]; 57 | let num = 0; 58 | if (r >= 252) num += 1; 59 | if (g >= 252) num += 1; 60 | if (b >= 252) num += 1; 61 | if (num >= 2) { 62 | positionX.push(w) 63 | } 64 | } 65 | } 66 | return findMost2(positionX) 67 | }, src) 68 | return distance.value * 340 / 552 69 | } 70 | 71 | module.exports = calcGapPosition -------------------------------------------------------------------------------- /juejin/cookie.js: -------------------------------------------------------------------------------- 1 | const config = require('../config/index') 2 | const { getBrowser, closeBrowser } = require("../puppeteer/index") 3 | const calcGapPosition = require('../puppeteer/gap') 4 | //格式化 cooKie 5 | const formatCookie = cookies => { 6 | const cookieItems = []; 7 | for (let item of cookies) { 8 | cookieItems.push(item.name + '=' + item.value) 9 | } 10 | return cookieItems.join(';') 11 | } 12 | 13 | const getCookie = async () => { 14 | if (global._cookie) return global._cookie 15 | try { 16 | const browser = await getBrowser() 17 | const page = await browser.newPage() 18 | await page.goto(config.juejin.login) 19 | await page.waitForTimeout(1000) 20 | await page.waitForSelector(".clickable") 21 | await page.click(".clickable") 22 | await page.waitForTimeout(1000) 23 | await page.waitForSelector('input[name=loginPhoneOrEmail]') 24 | console.log(`输入账号 ${config.user.mobile}`) 25 | await page.type('input[name=loginPhoneOrEmail]', config.user.mobile, { delay: 50 }) 26 | console.log(`输入密码 ****`) 27 | await page.type('input[name=loginPassword]', config.user.password, { delay: 50 }) 28 | await page.waitForTimeout(1000) 29 | await page.click('.btn') 30 | console.log(`开始登录`) 31 | await page.waitForSelector('#captcha-verify-image') 32 | await page.waitForTimeout(1000) 33 | let slideNum = 10 //最多尝试10次滑块验证 34 | let slideStatus = false 35 | let loginStatus = false 36 | let loginRes = null 37 | while (slideNum > 0 && slideStatus == false) { 38 | console.log(`开始第${10 - slideNum + 1}次验证`) 39 | const imageSrc = await page.$eval('#captcha-verify-image', el => el.src) 40 | const distance = await calcGapPosition(page, imageSrc) 41 | await page.hover('.secsdk-captcha-drag-icon') 42 | let ele = await page.$('.secsdk-captcha-drag-icon') 43 | let gapEle = await page.$('.captcha_verify_img_slide') 44 | let gapBlock = await gapEle.boundingBox() 45 | let block = await ele.boundingBox() 46 | await page.mouse.down() 47 | await page.mouse.move(gapBlock.x + distance + gapBlock.width - block.width / 2 - 5, block.y + (block.y / 2), { steps: 50 }) 48 | await page.mouse.up() 49 | let verifyRes = await page.waitForResponse(response => response.url().includes(config.juejin.verifyApi) && response.status() === 200) 50 | let jsonRes = await verifyRes.json() 51 | if (jsonRes.code == 200) { 52 | // 验证通过 53 | slideStatus = true 54 | console.log('验证成功,登录中...') 55 | loginRes = await page.waitForResponse(response => response.url().includes(config.juejin.loginApi) && response.status() === 200) 56 | try { 57 | jsonRes = await loginRes.json() 58 | if (jsonRes.message && jsonRes.message == 'error') { 59 | console.log(jsonRes) 60 | console.log(`掘金登录失败[0]`) 61 | } else { 62 | loginRes = jsonRes.data || {} 63 | loginStatus = true 64 | } 65 | } catch (err) { 66 | console.log(err) 67 | console.log(`登录出错`) 68 | } 69 | } else { 70 | await page.waitForTimeout(5 * 1000); 71 | await page.$('.secsdk_captcha_refresh--text') 72 | } 73 | slideNum--; 74 | } 75 | if (!loginStatus) { 76 | console.log(`掘金登录失败[1]`) 77 | return false 78 | } 79 | console.log(`登录成功`) 80 | await page.waitForTimeout(2 * 1000) 81 | const cookie = await page.cookies(); 82 | const cookieStr = formatCookie(cookie) 83 | global._cookie = cookieStr 84 | return cookieStr 85 | } catch (error) { 86 | console.log(error) 87 | } 88 | } 89 | 90 | module.exports = { 91 | getCookie, 92 | formatCookie 93 | } -------------------------------------------------------------------------------- /juejin/task/publish-article.js: -------------------------------------------------------------------------------- 1 | const { getCookie } = require('../cookie') 2 | const JuejinHttp = require('../api') 3 | const { getBrowser } = require("../../puppeteer/browser") 4 | 5 | const mockArticleData = { 6 | title: '如果有一天不做前端了,我会做什么?', 7 | brief_content: '毕业后就投身于前端行业,这期间做过业务,做过基建,大前端技术体系下的各个子方向基本都实践过。回过头来看,与刚进入前端行业时相比,对前端行业的认识更清晰...', 8 | content: `毕业后就投身于前端行业,这期间做过业务,做过基建,大前端技术体系下的各个子方向基本都实践过。回过头来看,与刚进入前端行业时相比,对前端行业的认识更清晰了,但也发现困惑更多了,追求的东西好像变了,欠缺的东西变多了。 9 | 10 | 我认为的工作是什么样的? 11 | 12 | 起初以为工作是生活的小部分,后来发现工作是生活的大部分,工作不顺影响生活,影响自己,我们应该更认真的去对待工作。 13 | 14 | 佛陀传中记录了一个故事叫《看顾水牛经》,我觉得它很好的表达了好的工作方式是什么样的。 15 | 16 | “什么才是一个好的牧童应该知道和做到的。一个好好照顾水牛的孩子,应该熟悉他看管的水牛。他会知道每一头水牛的特征和倾向,什么时候要替它们擦洗身体,怎样料理它们的伤口,用烟来赶走蚊虫,给它们找安全的路行走,爱护它们,带它们过河时行水最浅的地方,给它们新鲜的草和水,好好的保养草原,又使年长的水牛给年幼的做好榜样。”—— 看顾水牛经(佛陀传) 17 | 18 | 对牧童来说,放牛就是他的工作,工作内容很简单,但仔细深究就会发现 ,要关注很多方面才能将事情做好。正如我们所面对的工作一样,虽然内容各种各样的,但要做好,方法是一样的,认真的去做,找到正确的方式去做,希望各位能找到愿意以“主人翁”心态去工作的工作,看到自己工作的价值。 19 | 20 | 我为什么要做前端? 21 | 22 | 一个简单的问题,但大部分人却说不清楚,我当初也是误打误撞进入了这个行业,不知不觉就干了快七年。漫无目的的做一件事情是很难做好的,也是痛苦的,尤其是这件事还占据了我们最多的时间,所以我们需要想清楚,前端是什么?价值在哪? 23 | 24 | 这里我将前端按下面三个维度进行拆分: 25 | 26 | 面向公司的前端 - 不同的公司,不同的团队前端要做的事情也是有差异的,作为前端,可以解决公司前端相关问题 27 | 解决了生存的问题,维护一定的社会关系,在整个就业环境中表现得还不错,所以选择了这个行业 28 | 掌握并理解前端行业专业技术 - 掌握各项前端知识且可灵活运用解决行业问题 29 | 前端是一个充满了活力而且没有太多专业壁垒的行业,你可以很容易享受整个行业带来的改变以及去影响行业的发展,社区中的很多知名开源工具软件就是个人的作品,比如 Vue,这是一个通过个人影响全球开发者的典型案例。 30 | 基于你所掌握的技术能给社会带来的价值 - 技术转换为产品,产品带来价值 31 | 虽然前端只是软件工程分工中的一个环节,但前端是个另类,你完全可以通过前端技能去完成一款产品的开发,即在互联网的世界中,你可以创造属于你自己的产品,这也是前端的魅力,创造给未来带来更多可能。 32 | 33 | 记得曾经看到过的一句话,人一定得有创造,只有创造才能带来新的价值,我觉得前端就是一个有创造可能的行业。 34 | 35 | 做技术还是做业务 36 | 37 | 在稍微大一点的公司或者前端团队,前端的工作性质也会分为业务支持和技术架构 ,一个是将业务产品需求转化为面向普通用户的产品;一个是提供良好的技术工具给业务前端同学去更好的完成产品的开发。 38 | 39 | 如果有条件,我觉得两种都去接触接触,因为这本就是分不开的两个东西,只不过侧重点不同,所以带来的结果是做业务的同学需要考虑技术产出,做技术的同学需要有业务思考。有机会的话,最好两个方向都做一段时间,不限制自己只能做什么。 40 | 41 | 无论做哪个方向,一定要保持自己技术广度的扩充,你可以不去深挖,但一定要了解,当需要的时候你才能立马拿起来。 42 | 43 | 兴趣与工作的关系 44 | 45 | 我觉得兴趣与工作理想的关系应该是工作为主,兴趣为辅,两者缺一不可。对自己的工作没有一点兴趣的工作过程是痛苦的,你可以从过程中,或者结果上,或者关联的人、团体上发现自己感兴趣的点,这样你的工作会轻松很多,有点像在茫茫沙漠中行走,偶尔出现的一抹绿株。但兴趣不可占了全部,如果关注了过多的兴趣就可能会忽视工作本身,从而带来不好的结果。 46 | 47 | 如果你对你的工作还没有一点兴趣,那么请培养吧,如果有了兴趣,那么就想办法结合起来,让兴趣帮助你做得更好。 48 | 49 | 怎么知道自己对哪方面感兴趣? 看看自己下班后会做什么与工作关联的事情吧,没有外部推动,自己主动去关注尝试的可能就是你感兴趣的。 50 | 51 | “主动” 的工作思维 52 | 53 | 我带过团队,也经历过多任主管,我发现在评价一个人的时候,很关注主动性。你可能会听到领导说做事要主动点,可能也收到过缺乏业务思考的评价。 54 | 55 | 在长期的学校教育中,我们一直接受的是 “被动” 的学习方式,老师教什么,我们学什么。考核也是用固定的考题,具备标准的答案,所以导致我们缺乏了一点主动。我刚开始工作那几年就基本处于这种状态,去到新公司,等公司的新人培训,等待师兄的指导,等待领导安排任务;而没有去了解新团队是什么样的,我应该怎么样才能更好的融入,我能给团队带来什么?在团队的职责范围内,我更想做什么? 56 | 57 | 从以公司为中心转变为以我为中心,除了给公司带来一个员工外,想想能给公司带来什么? 58 | 59 | 工作太多,总是忙不过来怎么办? 60 | 61 | 忙碌会给人带来一种很充实的错觉,感到自己被需要,感到自己在成长,内心感到充实。不拒绝短期的忙碌,避免长期的忙碌。 62 | 63 | 忙不过来是很多人都会遇到的,也是经常听到大家抱怨的,总感觉活干不完,总感觉持续了一段时间都在忙碌中度过,但事后来看,好像又没做了什么东西? 64 | 65 | 为什么很忙? 66 | 67 | 需求太多,历史债务,人员更替 —— 客观因素 68 | 太着急做,可能做了 10 件事,解决了 10 个业务的问题,但是有一半是重复的 —— 没有找到根源,缺乏深层次的解决方案 69 | 所有的事情都想做,单线程当多线程用 —— 拆解归纳需求,按优先级取舍 70 | 71 | 怎么解? 72 | 73 | 如果活确实太多,而且都不能拉下,一个人当几个人用,可以和领导沟通,寻求解决办法 74 | 分清优先级(不要全是 P0/P1,那和没有优先级有什么区别?),该舍弃的舍弃 75 | 有时候做的许多需求(尤其是技术需求)并不是那么急需 76 | 分一部分给别人去做,事情一个人是做不完的,寻求合作伙伴一起解决 77 | 即使最忙的时候也抽时间停下来,想一想,和别人聊聊,也许会出现灵光一闪的情况 78 | 79 | 忙碌的状态肯定是不好的,不要沉迷忙碌而当做充实,忙碌不会让你成长,只会让你更疲惫。人生是马拉松长跑,不是短距离冲刺,适当停下来想一想,也许能找到更好的实现路径。 80 | 81 | 如何处理领导/下属/同事沟通相处? 82 | 和领导沟通担心留下不好印象,暴露自己的无知?所以遇事自己憋着,或是瞎揣测 83 | 建立有效沟通,提前想一遍,然后将自己的方案和结论拿出来沟通,领导往往比你获取到更多的信息,经验更丰富,和能给出你良好建议的人沟通才能帮助你更快成长 84 | 领导比你想象中更愿意和你沟通 85 | 和下属沟通有隔阂,总感觉留有余地,或是事情讲不明白 86 | 建立信任机制,根据性格选择合适的沟通方式,有问题该说的说,该表扬的表扬 87 | 沟通有困难,看看是不是有信息差或是经验欠缺。下属获取的信息可能不全面,技能和经验上可能不如自己,将背景和必要信息讲清楚 88 | 和同事担心竞争 89 | 你不可能一个人把事都做了,更多的是大家一起才能把事做好,我们应该考虑的是怎样把事情做得更好更大而不是想着蛋糕谁分大小的问题。如果你能帮助和影响他人成长,那么你一定也会有所收获的。 90 | 如何看待职业天花板? 91 | 92 | 前端是否有天花板,我说肯定是有的,每个行业都有天花板,只是前端的看着比较明显,我也一直在思考下一个成长点在哪? 93 | 94 | 我觉得前端只有某一方向的深度是不够的,不要局限自己,应该往综合方面发展,也不仅仅只关注技术层面。 95 | 96 | 与其想那么多 ,不如赶紧去做,只有尝试了才能知道结果 97 | 多和优秀的人、不同行业的人沟通,尝试进入不同的圈子 98 | 如果你已经有了选择的方向,那就持续专研下去,努力的过程终会成就自己 99 | 如果结果没有那么好,那么就接受平凡的结果,也接受平凡的自己 100 | 如果有一天不做前端了,我会做什么 101 | 102 | 我想我依然会抽时间写代码,做自己想要的产品,只打磨功能,不关注代码规范、不关注稳定性、不关注测试覆盖率、不关注 eslint、不关注性能、不关注 bug 率。 103 | 104 | 原文链接: 105 | http://click.aliyun.com/m/1000346073/ 106 | 107 | 本文为阿里云原创内容,未经允许不得转载。` 108 | } 109 | 110 | 111 | const articlePublish = async task => { 112 | const cookie = await getCookie() 113 | const API = new JuejinHttp(cookie) 114 | const times = task.limit - task.done; //需要执行的次数 115 | console.log(`需要发布${times}篇文章`) 116 | let links = []; 117 | let articles = [] 118 | const defaultArticles = Array(times).fill(mockArticleData) 119 | const browser = await getBrowser() 120 | const page = await browser.newPage() 121 | try { 122 | // 爬取一篇文章发布 并删除 123 | await page.goto(`https://segmentfault.com/blogs/newest`) 124 | await page.waitForTimeout(1000) 125 | await page.waitForSelector(".content-list-wrap") 126 | const host = `https://segmentfault.com` 127 | links = await page.$$eval('.content-list-wrap .list-group-item', els => { 128 | return els.map(el => { 129 | let $a = el.querySelector(".title") 130 | if ($a) { 131 | return $a.getAttribute('href') 132 | } 133 | }) 134 | }) 135 | links = links.filter(v => !!v) 136 | if (!links.length) { 137 | console.log(`未抓取到合适的文章`); 138 | } else { 139 | for (let i = 0; i < times; i++) { 140 | let link = host + (links[i] || links[0]) 141 | await page.goto(link) 142 | await page.waitForTimeout(1000) 143 | await page.waitForSelector('h1.h2') 144 | const title = await page.$$eval("h1.h2", els => { 145 | return els[0].innerText; 146 | }) 147 | let content = await page.$$eval('article.article-content', els => { 148 | return els[0].innerText 149 | }) 150 | if (content.length == 0) { 151 | content += title 152 | } 153 | content += ` \n> 来源: [${title}](${link}) \n` 154 | let brief_content = content.substr(0, 50) + '...' 155 | while (brief_content.length < 50) { 156 | brief_content += brief_content 157 | } 158 | articles.push({ 159 | title, 160 | content, 161 | brief_content, 162 | }) 163 | } 164 | } 165 | } catch (err) { 166 | console.log(`爬取文章失败,将发布默认文章`) 167 | console.log(err.message) 168 | } 169 | 170 | articles = articles.concat(defaultArticles) 171 | for (let i = 0; i < times; i++) { 172 | let currentArticle = articles[i] 173 | let { title, brief_content, content } = currentArticle 174 | const articleInfo = await API.createArticle(title).catch(err => { 175 | console.log(`发布失败`) 176 | console.log(err) 177 | }) 178 | const article_id = articleInfo['id'] 179 | await API.updateArticle(article_id, title, brief_content, content).catch(err => { 180 | console.log(`发布失败2`) 181 | console.log(err) 182 | }) 183 | // 去草稿箱点击模拟发布文章 184 | await page.goto(`https://juejin.cn/editor/drafts/${article_id}`) 185 | await page.waitForTimeout(2000) 186 | await page.click(".publish-popup") 187 | await page.waitForTimeout(2000) 188 | await page.click(".panel .footer button:last-of-type") 189 | // 监听发布成功 190 | const publishRes = await page.waitForResponse(response => response.url().includes(`https://api.juejin.cn/content_api/v1/article/publish`)) 191 | const publishResJson = await publishRes.json() 192 | if (publishResJson.err_no == 0) { 193 | const data = publishResJson.data 194 | // 删除刚刚发布的文章 195 | // ids.push(data.article_id) 196 | // await API.articleRemove(data.article_id || '') 197 | } 198 | } 199 | await page.close() 200 | console.log(`发布文章 done`) 201 | } 202 | 203 | module.exports = articlePublish -------------------------------------------------------------------------------- /juejin/api.js: -------------------------------------------------------------------------------- 1 | const axios = require('axios') 2 | const { deepMerge, getRandomInt } = require('../utils') 3 | const defaultOptions = { 4 | method: 'GET', 5 | data: {}, 6 | params: {}, 7 | headers: { 8 | origin: 'https://juejin.cn', 9 | pragma: 'no-cache', 10 | referer: 'https://juejin.cn/', 11 | 'sec-ch-ua': 12 | '"Chromium";v="92", " Not A;Brand";v="99", "Google Chrome";v="92"', 13 | 'sec-ch-ua-mobile': '?0', 14 | 'sec-fetch-dest': 'empty', 15 | 'sec-fetch-mode': 'cors', 16 | 'sec-fetch-site': 'same-site', 17 | 'User-Agent': 18 | 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36', 19 | }, 20 | } 21 | 22 | class JuejinHttp { 23 | constructor(cookie) { 24 | this.cookie = cookie || '' 25 | } 26 | request(options) { 27 | return new Promise((resolve, reject) => { 28 | options = Object.assign({}, options, { 29 | headers: { 30 | cookie: this.cookie || '' 31 | } 32 | }) 33 | const opts = deepMerge(defaultOptions, options) 34 | axios(opts) 35 | .then((res) => { 36 | let data = res.data || {} 37 | resolve(data.data) 38 | }) 39 | .catch((err) => { 40 | reject(err) 41 | }) 42 | }) 43 | } 44 | queryUserProfile() { 45 | return this.request({ 46 | method: 'GET', 47 | url: 'https://api.juejin.cn/user_api/v1/user/get' 48 | }) 49 | } 50 | // 获取今日状态 51 | queryTodayStatus() { 52 | return this.request({ 53 | method: 'GET', 54 | url: 'https://api.juejin.cn/growth_api/v1/get_today_status' 55 | }) 56 | } 57 | // 今日签到 58 | handleCheckIn() { 59 | return this.request({ 60 | method: 'POST', 61 | url: 'https://api.juejin.cn/growth_api/v1/check_in', 62 | }) 63 | } 64 | // 开始抽奖 65 | handleLotteryDraw() { 66 | return this.request({ 67 | method: 'POST', 68 | url: 'https://api.juejin.cn/growth_api/v1/lottery/draw' 69 | }) 70 | } 71 | queryUserToken() { 72 | return this.request({ 73 | method: 'GET', 74 | url: 'https://juejin.cn/get/token' 75 | }) 76 | } 77 | // 查询总矿石 78 | queryTotalPoint() { 79 | return this.request({ 80 | method: 'GET', 81 | url: 'https://api.juejin.cn/growth_api/v1/get_cur_point' 82 | }) 83 | } 84 | // 查询是否有免费抽奖次数 85 | queryLotteryConfig() { 86 | return this.request({ 87 | method: 'GET', 88 | url: 'https://api.juejin.cn/growth_api/v1/lottery_config/get' 89 | }) 90 | } 91 | // 获取沾喜气列表 92 | queryLuckyList() { 93 | return this.request({ 94 | method: 'POST', 95 | url: 'https://api.juejin.cn/growth_api/v1/lottery_history/global_big', 96 | data: { page_no: 1, page_size: 5 } 97 | }) 98 | } 99 | // 沾喜气 id 100 | handleDipLucky(id) { 101 | return this.request({ 102 | method: 'POST', 103 | url: 'https://api.juejin.cn/growth_api/v1/lottery_lucky/dip_lucky', 104 | data: { lottery_history_id: id } 105 | }) 106 | } 107 | 108 | getTaskList(growth_type = 1) { 109 | return this.request({ 110 | method: 'POST', 111 | url: 'https://api.juejin.cn/growth_api/v1/user_growth/task_list', 112 | data: { growth_type } 113 | }) 114 | } 115 | 116 | // 获取推荐文章列表 117 | getRecommendArticles(sort_type = 300) { 118 | return this.request({ 119 | method: 'POST', 120 | url: 'https://api.juejin.cn/recommend_api/v1/article/recommend_all_feed', 121 | data: { 122 | client_type: 2608, 123 | cursor: "0", 124 | id_type: 2, 125 | limit: 20, 126 | sort_type, // 300 最新排序 127 | } 128 | }) 129 | } 130 | //点赞 131 | diggSave(articleId, item_type = 2) { 132 | return this.request({ 133 | method: 'POST', 134 | url: 'https://api.juejin.cn/interact_api/v1/digg/save', 135 | data: { 136 | client_type: 2608, 137 | item_id: articleId + '', 138 | item_type, 139 | } 140 | }) 141 | } 142 | diggCancel(articleId, item_type = 2) { 143 | return this.request({ 144 | method: 'POST', 145 | url: 'https://api.juejin.cn/interact_api/v1/digg/cancel', 146 | data: { 147 | client_type: 2608, 148 | item_id: articleId + '', 149 | item_type, 150 | } 151 | }) 152 | } 153 | 154 | // 获取我的收藏集 155 | getMyCollectionset(article_id = "") { 156 | return this.request({ 157 | method: 'POST', 158 | url: 'https://api.juejin.cn/interact_api/v2/collectionset/list', 159 | data: { 160 | article_id: article_id + '', 161 | cursor: "0", 162 | limit: 10, 163 | } 164 | }) 165 | } 166 | 167 | //文章收藏 168 | articleCollectAdd(article_id, collection_id) { 169 | return this.request({ 170 | method: 'POST', 171 | url: 'https://api.juejin.cn/interact_api/v2/collectionset/add_article', 172 | data: { 173 | article_id: article_id + '', 174 | is_collect_fast: false, 175 | select_collection_ids: [collection_id + ''], 176 | unselect_collection_ids: [] 177 | } 178 | }) 179 | } 180 | articleCollectRemove(article_id) { 181 | return this.request({ 182 | method: 'POST', 183 | url: 'https://api.juejin.cn/interact_api/v2/collectionset/delete_article', 184 | data: { 185 | article_id: article_id + '', 186 | } 187 | }) 188 | } 189 | 190 | // 获取推荐用户 191 | getRecommendAuthors() { 192 | // const categoryIds = [6809637769959178254, 6809637767543259144, 6809635626879549454, 6809635626661445640, 6809637773935378440, 6809637771511070734, 6809637776263217160, 6809637772874219534] 193 | const page = getRandomInt(0, 4) 194 | const cursor = page * 20 195 | // 随机分页 和 随机 分类 196 | return this.request({ 197 | method: 'GET', 198 | url: `https://api.juejin.cn/user_api/v1/author/recommend`, 199 | params: { 200 | cursor, 201 | limit: 20 202 | } 203 | }) 204 | } 205 | 206 | // 关注/取消关注用户 207 | toggleFollowAuthor(uid, isFollow = true) { 208 | return this.request({ 209 | method: 'POST', 210 | url: `https://api.juejin.cn/interact_api/v1/follow/` + (isFollow ? 'do' : 'undo'), 211 | data: { 212 | type: 1, 213 | id: uid 214 | } 215 | }) 216 | } 217 | 218 | //文章评论 219 | // item_type 2 为 文章 4 为 沸点 220 | articleCommentAdd(article_id, content, item_type = 2) { 221 | return this.request({ 222 | method: 'POST', 223 | url: `https://api.juejin.cn/interact_api/v1/comment/publish`, 224 | data: { 225 | client_type: 2608, 226 | comment_content: content + '', 227 | comment_pics: [], 228 | item_id: article_id, 229 | item_type 230 | } 231 | }) 232 | } 233 | 234 | //删除文章评论 235 | articleCommentRemove(comment_id) { 236 | return this.request({ 237 | method: 'POST', 238 | url: `https://api.juejin.cn/interact_api/v1/comment/delete`, 239 | data: { 240 | comment_id 241 | } 242 | }) 243 | } 244 | 245 | // 获取沸点列表 246 | getRecommendPins(sort_type = 300) { 247 | return this.request({ 248 | method: 'POST', 249 | url: 'https://api.juejin.cn/recommend_api/v1/short_msg/recommend', 250 | data: { 251 | cursor: "0", 252 | id_type: 4, 253 | limit: 20, 254 | sort_type, 255 | } 256 | }) 257 | } 258 | 259 | // 发布沸点 260 | pinPublish(content) { 261 | return this.request({ 262 | method: 'POST', 263 | url: 'https://api.juejin.cn/content_api/v1/short_msg/publish', 264 | data: { 265 | content, 266 | sync_to_org: false, 267 | } 268 | }) 269 | } 270 | //删除沸点 271 | pinRemove(msg_id) { 272 | return this.request({ 273 | method: 'POST', 274 | url: 'https://api.juejin.cn/content_api/v1/short_msg/delete', 275 | data: { 276 | msg_id, 277 | } 278 | }) 279 | } 280 | //删除文章 281 | articleRemove(article_id) { 282 | return this.request({ 283 | method: 'POST', 284 | url: 'https://api.juejin.cn/content_api/v1/article/delete', 285 | data: { 286 | article_id: article_id + '', 287 | } 288 | }) 289 | } 290 | // 创建文章 291 | createArticle(title) { 292 | return this.request({ 293 | method: 'POST', 294 | url: 'https://api.juejin.cn/content_api/v1/article_draft/create', 295 | data: { 296 | brief_content: "", 297 | category_id: "0", 298 | cover_image: "", 299 | edit_type: 10, 300 | html_content: "deprecated", 301 | link_url: "", 302 | mark_content: "", 303 | tag_ids: [], 304 | title, 305 | } 306 | }) 307 | } 308 | 309 | // 更新文章 310 | // 文章id ,简介 , markdown content 311 | updateArticle(id, title, brief_content, mark_content) { 312 | return this.request({ 313 | method: 'POST', 314 | url: 'https://api.juejin.cn/content_api/v1/article_draft/update', 315 | data: { 316 | brief_content, 317 | category_id: "6809637771511070734", //开发工具 分类 318 | cover_image: "", 319 | edit_type: 10, 320 | html_content: "deprecated", 321 | link_url: "", 322 | id: id + '', 323 | mark_content, 324 | tag_ids: ["6809640702272602126"], // 负载均衡 tag 325 | title, 326 | } 327 | }) 328 | } 329 | 330 | // 成长任务埋点 331 | // 目前用于 文章阅读 332 | growthPointReport(item_id, task_id = 13) { 333 | return this.request({ 334 | method: 'POST', 335 | url: 'https://api.juejin.cn/growth_api/v1/user_growth/add_point_report', 336 | data: { 337 | growth_type: 1, 338 | item_id: item_id + "", 339 | task_id 340 | } 341 | }) 342 | } 343 | 344 | // 获取文章评论 345 | getArticleComments(item_id, item_type = 2) { 346 | return this.request({ 347 | method: 'POST', 348 | url: 'https://api.juejin.cn/interact_api/v1/comment/list', 349 | data: { 350 | cursor: "0", 351 | item_type, 352 | sort: 0, 353 | limit: 20, 354 | item_id: item_id + "", 355 | } 356 | }) 357 | } 358 | } 359 | 360 | module.exports = JuejinHttp -------------------------------------------------------------------------------- /data/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "homepage": "https://github.com/chinjiaqing/juejin-helper", 3 | "comments": { 4 | "pin": [ 5 | "凿井而饮,耕田而食。", 6 | "我的情书有点长,长到忘记了内容,剩下了感觉,还有我的胆怯。", 7 | "世事易变,匪石弗转。", 8 | "忽见陌头杨柳色,悔教夫婿觅封侯。", 9 | "珍惜眼前的幸福吧,而不是去奢求无法得到的东西。", 10 | "秋阴不散霜飞晚,留得枯荷听雨声。", 11 | "只说一句:脱离现实业务场景的抽象都是刷流氓", 12 | "[吃瓜群众]", 13 | "看似无意义对吧?来,我来告诉你痛点\n1. 我要修改它原始组件中的某些字段的组件参数默认值(所有该组件)\n2.我要给所有该组件加同一段业务逻辑\n3.我要修改所有该组件的样式\n4.我要让所有该组的js代码一模一样\n从可维护性可扩展性可移植性上讲,哪一个更强?", 14 | "后期可以扩展吧", 15 | "如果有来生,要做一棵树,站成永恒,没有悲欢的姿势。", 16 | "[吃瓜群众][吃瓜群众]", 17 | "我希望兜兜转转之后那个人还是你。", 18 | "实变函数学十遍,泛函学完心泛寒。", 19 | "送你一个小红心", 20 | "别卷了", 21 | "一本书上每多一个公式,就会减少一半读者。", 22 | "活着努力干,死了无遗憾!", 23 | "6", 24 | "我为什么没有早点睡!", 25 | "恭喜这个J\n友", 26 | "左手右手?", 27 | "[吃瓜群众][吃瓜群众][吃瓜群众]", 28 | "恭喜~", 29 | "[力量]", 30 | "恭喜", 31 | "恭喜恭喜", 32 | "恭喜🎉", 33 | "恭喜!999999", 34 | "晚安", 35 | "奥里给", 36 | "闾阎扑地,钟鸣鼎食之家;舸舰迷津,青雀黄龙之舳。", 37 | "[看][看][看]", 38 | "666", 39 | "杭州,奋斗逼的城市,应该是国内最卷的了吧,大小周,996~", 40 | "没有绝对正确的决定,我们只能用行动让决定变得正确", 41 | "最是人间留不住,朱颜辞镜花辞树。", 42 | "就让我水一次吧!就一次~~", 43 | "如果能摸摸我的头的话,我会很高兴的!", 44 | "世界之大为何我们相遇,难道是缘分,难道是天意。", 45 | "早", 46 | "早呀!", 47 | "卷起来", 48 | "早早早", 49 | "卷的我横竖睡不着", 50 | "[黑脸][黑脸]", 51 | "吃的真好", 52 | "困了,睡觉💤", 53 | "黑云翻墨未遮山,白雨跳珠乱入船。", 54 | "只要你够烂就不怕被卷", 55 | "田园寥落干戈后,骨肉流离道路中。", 56 | "都睡了吗,我还没睡", 57 | "下班了", 58 | "金牛奖带来的困扰吗", 59 | "我也睡不着", 60 | "干啥睡不着", 61 | "别睡了,起来敲代码吧", 62 | "赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞", 63 | "多背面试题", 64 | "八股文乱杀", 65 | "边洗澡边刷视频,刷到这个的时候正在抹沐浴露,你知道用下巴点赞有多困难吗?", 66 | "[菜刀]", 67 | "八股文- 面试- 查漏补齐-面试-八股文", 68 | "凑热闹", 69 | "还有什么能比给你一个赞更激动的事情", 70 | "敬业", 71 | "老哥稳,关注了", 72 | "牛啊", 73 | "很下饭的感觉", 74 | "日常水贴", 75 | "占楼", 76 | "中午不应该吃好一点嘛,下午很快就饿了", 77 | "你什么时候放下,什么时候就没有烦恼。", 78 | "[微笑]", 79 | "[炸弹]", 80 | "[不失礼貌的微笑]", 81 | "冲冲冲", 82 | "[看]写好了,等着明天发", 83 | "中一次吧[泪奔]", 84 | "加油得矿石,然后梭哈", 85 | "1500会不会……太少了", 86 | "1500矿石,冲冲冲", 87 | "1500矿石,冲冲冲,switch,冲", 88 | "要超越过去与悲伤,用坚强和笑容去开拓明天。", 89 | "你猜", 90 | "没有", 91 | "我在摸我自己", 92 | "这么晚居然还能抓到摸鱼的,自家的🐟都摸光了", 93 | "一起去看星星吧。", 94 | "怎么学的,躺着学?站着学[奸笑]", 95 | "[左哼哼]", 96 | "[礼物]", 97 | "不要祈求生活公平,只需要适应它。", 98 | "牛", 99 | "美人卷珠帘,深坐颦蛾眉。", 100 | "是啊", 101 | "[心碎]", 102 | "有情人终成眷属,没钱人亲眼目睹。", 103 | "所爱隔山海,山海不可平。", 104 | "恰沐春风共同游,终只叹,木已舟。", 105 | "问呗就", 106 | "看业务是不是特别杂", 107 | "直接问", 108 | "路这么窄,好难过啊!", 109 | "荷尔蒙决定一见钟情,多巴胺决定天长地久。", 110 | "贴纸吗", 111 | "中了啥", 112 | "只要耐心等待,裂缝总会出现的。", 113 | "我寻了半生的春天,你一笑便是了。", 114 | "每日鸡汤", 115 | "加油", 116 | "阶砖不会拒绝磨蚀,窗花不可幽禁落霞。", 117 | "岁寒,然后知松柏之后凋也。", 118 | "你是真倦", 119 | "我需要一块二向箔,清理用。", 120 | "人总是会变的,不要害怕改变哦。", 121 | "四十了呗", 122 | "憧憬是距离理解最遥远的感情。", 123 | "我很累,想停下了。就让我停下吧。", 124 | "找个目标转移注意力", 125 | "定个小目标,比如说......", 126 | "比如先跑几天步,然后再定个目标干点啥", 127 | "定一个目标,去付出行动", 128 | "找个对象", 129 | "辞职治百病", 130 | "学习呗,考个在职的mba", 131 | "为什么周末晚上10点多还有人发沸点的啊[无辜呆]\n沸点不都是上班摸鱼发的吗", 132 | "就迷茫着迷茫着就习惯了[黑脸][黑脸]", 133 | "飒爽英姿闯江湖,诗酒茶话莫孤独。", 134 | "[听歌]", 135 | "从这里(太空)根本看不到什么国境线,只有地球。", 136 | "熬夜一下平衡一下", 137 | "我们控制,我们收容,我们保护。", 138 | "走错片场了吧", 139 | "这个人好弱啊,真的是我们的指挥使吗?", 140 | "介不是抖音文创嘛", 141 | "抽奖从未中过,能给我画个饼么[奸笑]", 142 | "好难", 143 | "[灵光一现]", 144 | "有新意", 145 | "太麻烦了,不参与了。。。", 146 | "栓q", 147 | "都给我冲!!!", 148 | "我想吃月饼[吃瓜群众]", 149 | "懒得参加了", 150 | "早下载了", 151 | "就让我中一次吧[大哭]", 152 | "种鸽锤子,在掘金挖了一阵土,没中过!", 153 | "看我看我,下载安装了然后呢?登陆新账号?", 154 | "给我中!", 155 | "已下载,莫辜负(^V^)", 156 | "手机党电脑党是不是说反了??", 157 | "建议那些已经得到月饼的可以不来凑热闹了,给没有发月饼的人一点机会[捂脸]", 158 | "小助手我发现,文案的一处bug,“建议掘友们都参加,增大中奖概率”?不应该是拉低中奖概率吗[撇嘴]\n(我删评论,你能给我一盒月饼吗[色])", 159 | "已经下载了,还可以吗", 160 | "代码写诗这个没看懂", 161 | "虚怀若谷,戒骄戒躁。", 162 | "你信不信两个人没缘分的时候就算在同一个小区也不会遇见了,珍惜眼前人", 163 | "[调皮]", 164 | "别人说的记在脑袋里,而自己的,则放在心里。", 165 | "人间忽晚,山河已秋。", 166 | "那是因为秋天来了[调皮]", 167 | "去把这个并不完美的世界,变成你所期望的样子。", 168 | "我喝过你喝的西北风,这算不算很穷。", 169 | "你小子,果真又是分母[白眼的狗]", 170 | "我居然中了 谢谢你小子", 171 | "中奖绝缘体[流泪]", 172 | "我要这会员有何用[黑脸]", 173 | "无了无了", 174 | "标签一旦被赋予,就再难撕下", 175 | "不能将每个人贴标签分类。人是会变得,每个阶段不一样。那些个特性也只是当前某个处境下的自己。😝", 176 | "秃头就是第一反应[吃瓜群众]", 177 | "真可悲,你什么都不知道,在这个世界上没有什么是不重要的!", 178 | "倒头就睡", 179 | "[飞吻]", 180 | "[发呆]", 181 | "早死早超生[黑脸]", 182 | "小时候词不达意,长大了言不由衷。", 183 | "十五十六不是有手就行🤺", 184 | "突然觉得自己不是特别菜有没有[奸笑]", 185 | "会copy就行[吃瓜群众]", 186 | "15很高吗", 187 | "实习嘞一般要问什么呢大佬", 188 | "[耶]", 189 | "你这个年纪,你怎么睡得着的。[看]", 190 | "对于讨厌的人不要想改变他,远离他才是上策。", 191 | "哥们先回家了,老哥早点回[泣不成声]", 192 | "粗缯大布裹生涯,腹有诗书气自华。", 193 | "这很难吗?\nStream.map就行", 194 | "可恶,又被你装到了", 195 | "[色]", 196 | "因为痛苦太有价值,因为回忆太珍贵,所以我们更要继续往前走。", 197 | "我爱上的人,称我为怪叔叔", 198 | "为荣耀而生,为荣誉而死。", 199 | "哈哈", 200 | "[赞][赞][赞]", 201 | "[赞]", 202 | "1", 203 | "抽奖就算了,还得下载APP", 204 | "+1", 205 | "我昨天就想买个椅子,今天才看到你昨天出个送椅子的活动,抓紧给我送家里", 206 | "下载了哪里领取矿石呢", 207 | "寻宝值在哪看。", 208 | "少了一天怎么办?", 209 | "抽取就算了,从来没中过", 210 | "配色还挺好看", 211 | "正准备搞个人体工学椅,要是能中个椅子,就省钱了", 212 | "今天才看到少了一天 不够了", 213 | "11111", 214 | "像这种抽奖的活动统一不参加,性价比太低了[看]", 215 | "在哪里寻宝[看]", 216 | "又发福利了", 217 | "残花无零,落红无情", 218 | "谎话被歌颂,扮清醒的人作哑装聋。", 219 | "灯不错", 220 | "迎着风,拥抱彩虹!", 221 | "学不进", 222 | "可能不止", 223 | "我一天学25个小时", 224 | "如果自己不想积极认真地生活,不管得到什么样的回答都没用。", 225 | "怎么看自己的寻宝值多少", 226 | "我天,这个椅子也太好看了吧[可怜]", 227 | "没有手机怎么办[泣不成声]", 228 | "矿石多久到,就差这点凑满了", 229 | "发了就有一千矿石吗", 230 | "活动是越来越没诚意了", 231 | "该活动为稀土掘金 APP 专属活动!寻宝任务只有在APP上完成,寻宝进度才会增加,web端无效噢???没看到这条,醉了[流泪]", 232 | "在哪里看寻宝值?", 233 | "[看]", 234 | "[泣不成声]", 235 | "中", 236 | "疯狂的星期五到了!", 237 | "9", 238 | "...", 239 | "侯非侯,王非王,千乘万骑走北芒。", 240 | "和爸妈好好沟通", 241 | "为自己而活 自己做选择 自己承担后果", 242 | "有道理", 243 | "人都有世俗的目的,爸妈希望你幸福,也希望你传宗接代", 244 | "不孝有三,无后为大", 245 | "爱,其实很简单,困难的是去接受它。", 246 | "满堂花醉三千客,一剑霜寒十四州。", 247 | "美", 248 | "迄今所有人生都大写着失败,但并不妨碍我继续向前。", 249 | "没有BUG的代码是不完美的!", 250 | "我的终点,与幸福同在。", 251 | "球场耍[得意]", 252 | "家里蹲", 253 | "野蛮人之间人吃人,文明人之间人骗人。", 254 | "因为你喜欢海,所以我一直浪。", 255 | "冲冲冲!", 256 | "不努力就只能听到别人的好消息。", 257 | "中秋还有半价?", 258 | "花草落地生根,它有选择么?", 259 | "[呲牙]", 260 | "怎么看寻宝值", 261 | "[奋斗]", 262 | "黄河之水天上来,奔流到海不复回。", 263 | "你在我规划的航程上,我在你投射的视线里。", 264 | "孤舟蓑笠翁,独钓寒江雪。", 265 | "如果爱,请深爱,如不爱,请离开", 266 | "各种各样的都有。\n觉得好玩吧,diy的快乐哈哈哈", 267 | "vuepress", 268 | "从你的思考来说 你并不需要", 269 | "没有意义", 270 | "搞自己的博客更多的意义是扩大自己的知名度和影响力 还可以在自己的博客上做自己想做的功能 有了流量可以自己接广告 可以DIY自己想要的网站", 271 | "github上又很多搭建的方法,搭建完部署下就行了,如果不想搭博客,直接在掘金写就行了", 272 | "每一个不曾起舞的日子,都是对生命的辜负。", 273 | "滴,全程消费,不差钱", 274 | "咋滴,忘卡了", 275 | "我会穿越那七大海洋,去和你相见。", 276 | "[拥抱]", 277 | "[酷拽]", 278 | "生命太短,一秒钟都不留给让人不快的家伙。", 279 | "晚上好", 280 | "好", 281 | "就要死皮赖脸的喜欢你", 282 | "我是他的盾牌,我是他的利刃。我深知他,连同他的过去和未来。", 283 | "如果你有梦想,就要守护它。", 284 | "欲买桂花同载酒,荒泷天下第一斗。", 285 | "我也想杀死伤痛,让那恩怨有始有终。", 286 | "冲", 287 | "好几个杯子了", 288 | "参加", 289 | "报名", 290 | "来了来了", 291 | "报名链接在哪呢", 292 | "m", 293 | "马克杯马克杯", 294 | "杯子!!![看]", 295 | "期待,搞起来", 296 | "杯子杯子杯子[色]", 297 | "[吐舌]", 298 | "[舔屏]", 299 | "皮", 300 | "去医院", 301 | "有没有运动过?如果最近没有运动或者长时间走路,抽个血查查尿酸咯 可能是痛风", 302 | "代码就20%吧", 303 | "看任意文章都可以吗?", 304 | "这么开心", 305 | "居家办公不好嘛", 306 | "我也是 一度以为手机坏了", 307 | "凌晨4点,我还在线", 308 | "真能熬呀", 309 | "梦想那么多干啥", 310 | "死了的呢?", 311 | "💰", 312 | "我好颓废。", 313 | "[发]", 314 | "[鄙视]", 315 | "这么多单词认真的吗", 316 | "这是考研的日常安排没跑了", 317 | "[嘴唇]", 318 | "[恐惧]", 319 | "666666666666666666666", 320 | "什么软件呀,一天背几个?", 321 | "[鼓掌]", 322 | "你没毕业就是秋招", 323 | "这他妈3倍薪资爽歪歪。", 324 | "[惊讶]", 325 | "[惊喜]", 326 | "房间里发呆混日子[捂脸]", 327 | "真棒啊[呲牙]", 328 | "[谢谢]", 329 | "[西瓜]", 330 | "不能", 331 | "[月亮]", 332 | "晚上下雨了", 333 | "冷死了", 334 | "[我想静静]", 335 | "500G硬盘?直接整个新的1T得了。", 336 | "优秀", 337 | "生日快乐", 338 | "哦。", 339 | "快生快生,对,说的就是你🫵🏼", 340 | "赞", 341 | "莫道不销魂,帘卷西风,人比黄花瘦。", 342 | "我的就是灰色狗狗 我想要绿色狗狗的[惊喜]", 343 | "[偷笑]", 344 | "不错", 345 | "秀", 346 | "直道相思了无益,未妨惆怅是清狂。", 347 | "强", 348 | "老夫聊发少年狂,左牵黄,右擎苍。", 349 | "[666]", 350 | "从哪里参加的青训营啊", 351 | "加油哦", 352 | "吃真少 胃口像那只小猫一样[吃瓜群众]", 353 | "加油加油", 354 | "游蕲水清泉寺,寺临兰溪,溪水西流。", 355 | "加油!", 356 | "中了什么", 357 | "恭喜小伙伴!", 358 | "半夜看到双拼冰淇淋[惊喜] 馋死啦", 359 | "数人世相逢,百年欢笑,能得几回又。", 360 | "看手是个男的,怎么说话娘们唧唧的", 361 | "气你用[看]", 362 | "工作分配交流上有很大作用,聊天的话一点用都没有", 363 | "装b用。。看错了,看成jvm了", 364 | "我看到了,就是不想回你", 365 | "222", 366 | "要不先挣1个亿吧[看]", 367 | "预期有点大啊", 368 | "怕不是终生目标吧", 369 | "要不然换一个吧,你这个不是小目标啊", 370 | "因为能力不够,所以抱怨,没毛病吧", 371 | "you can you up ?", 372 | "[晕]", 373 | "假期有多兴奋,上班就有多困", 374 | "回来上7天班,确实很长[大哭]", 375 | "可是我有八天[无辜呆]", 376 | "我已经上班5天了", 377 | "想想就觉得生无可恋", 378 | "我祝老板往死往死健康 往死往死幸福奥", 379 | "难过了", 380 | "哭了~", 381 | "哈哈哈哈哈哈哈,刚看到觉得很好笑,马上又觉得好笑的是自己,毕竟逃不过", 382 | "[流泪][流泪][流泪]我承受不住", 383 | "七天是谁?", 384 | "7+7", 385 | "懂你意思", 386 | "已经 知道了", 387 | "真掘了", 388 | "你这像极了新冠", 389 | "喉咙针太恐怖了", 390 | "插个屁股?[疑问]", 391 | "还有喉咙针啊 小时候扎过屁股针", 392 | "有没有可能是。。。", 393 | "喉咙针,啊 那可太难了", 394 | "喉咙针是什么?", 395 | "什么意思", 396 | "来了来了 它们来了", 397 | "放长假", 398 | "离职解决假期综合症", 399 | "冲业绩呢 年底了[看]", 400 | "我以为是拆[黑脸]", 401 | "完了被针对了[哭笑]", 402 | "交警也上班了", 403 | "实时文字直播整一个,今天就蹲这了", 404 | "上班可以看吗", 405 | "七天假期都不打,现在上班了,开打了", 406 | "有惊无险jd拿下lpl开门红", 407 | "rng 怎么样了", 408 | "一上班就想睡觉", 409 | "没有坚持下来", 410 | "没有抱枕,选了马克杯,[流泪]", 411 | "睡好点吧,明天才是", 412 | "你上次也是上次这么说的[思考]", 413 | "我选了眼罩", 414 | "你这没有鱼,全是水", 415 | "好像是个屁,不太确定,我再闻闻", 416 | "小学语文老师带刀赶来在路上了", 417 | "我猛然一看,就猛然看到这个评论,我直呼我直呼,上次看到这么这么的发言还是上次,这评论属于是典型的典型了属于是,我之前还没发现,当我发现的时候我已经发现了,这评论就像一个评论,评论的内容充满了内容,我不禁感慨了一句感慨,真是听君一席话,如听一席话,希望下次看到这么这么的发言是下次", 418 | "[拳头]", 419 | "有一些情感,没办法辜负它。[ok]", 420 | "我的心是生命的禁区,总有人无意闯进来,然后自杀。[我想静静]", 421 | "啊这[流泪]", 422 | "睡啥睡,起来嗨", 423 | "再装 less 至于要不要移除 sass 随意", 424 | "安装less和less-loader", 425 | "[撇嘴]", 426 | "[打脸]羡慕", 427 | "不错不错", 428 | "我的天终于开通私信了", 429 | "你小子", 430 | "诺你已经陷入黑暗,那你离死亡不远了![大哭]", 431 | "这个是即时通讯技术吗", 432 | "请私信我一波测试 谢谢!!!", 433 | "不愧是你", 434 | "可以", 435 | "很nice,继续加油⛽️", 436 | "终于有这个功能了", 437 | "6!", 438 | "理性和感性,在我看来,是两种不同价值观的碰撞。[绝望的凝视]", 439 | "经济压力转为代码动力", 440 | "专心撸码", 441 | "[流汗]", 442 | "如果全世界都对你恶语相加,我愿对你说上一世情话。[鄙视]", 443 | "不会去爱,那就别爱,天有注定,缘也会散。[发]", 444 | "加你了", 445 | "好啊", 446 | "如何暴富,帮我解决吧[看]", 447 | "怎么突破异性朋友之间的朋友关系\n我是我女闺蜜的男闺蜜,想突破闺蜜关系 求教[不失礼貌的微笑]", 448 | "矿石是不是少了个0", 449 | "di", 450 | "我来了", 451 | "来啦来啦。我来啦[呲牙]", 452 | "属实太少了点[捂脸]", 453 | "想要爱情的苦来深深刺痛我", 454 | "这个是app 专属么?", 455 | "程序猿or程序媛的问题可以吗", 456 | "说明一个问题:这么卷跟在座的各位都有关系[吐舌]矿石都给我卷没了", 457 | "为什么排除爱情问题?是因为容易引起性别对立、引战吗?[震惊]", 458 | "拉跨活动", 459 | "不参加了,活动泰拉跨", 460 | "就这?恶心人是吧", 461 | "彳亍", 462 | "b站找个视频过一遍", 463 | "铁锅只顿大鹅[奸笑]", 464 | "鸡蛋灌饼,麦当劳", 465 | "[蛋糕]", 466 | "在人山人海的无数漠然之中,拥有这一份感动。[憨笑]", 467 | "买基金不确定会亏还是涨,但是买金的话,你还要放着,太麻烦,还是存点钱吧。", 468 | "还是买房吧", 469 | "啥都不买", 470 | "现在的基金真的死亏[流泪][流泪][流泪]", 471 | "买金保值", 472 | "[阴险]", 473 | "给机会没。跑[流泪]", 474 | "俺也是丐帮弟子", 475 | "中丐股 -40%路过[流泪]", 476 | "哈哈哈", 477 | "今天不是大A红嘛", 478 | "对于贫农影响不大", 479 | "中产难过", 480 | "嗯嗯", 481 | "呲溜", 482 | "人生不过如此[呲牙]", 483 | "人生快乐大抵如此", 484 | "真不错 深夜放毒[看]", 485 | "排除小公司,否则可以仲裁,不是说小公司怎么样,因为遇到过老板就是没钱,公司也没有可执行的财产", 486 | "工作中不可避免的会和同事,上司甚至是 Boss 有意见不合的情况出现, 身为打工一族的我们当然希望自己是开开心心的工作, 不喜欢整天斗来斗去,想要一个和谐的工作环境, 这就要求我们去处理好工作中的人际关系,\n除了保持微笑真诚待人外,自信也是一大因素,当然最重要的一点就是本着\"忍无可忍,再忍一次\"的原则稍微放宽一点自己的底线,相信小小的退让可以让你更如鱼得水的!", 487 | "行行行好好好", 488 | "微笑,善解人意,不搞小圈子,有原则,不阿谀奉承,互相尊重,完事啦", 489 | "马上社区就给你打电话,让你隔离七天了,不说了,再有几个小时我就可以解禁了。。", 490 | "jy, yyds", 491 | "66", 492 | "曲高必然和寡,英雄总是孤独。[调皮]", 493 | "盲猜你是深圳的", 494 | "只要不是早上五六点 我都可以接受", 495 | "细节决成败,态度决未来。[菜刀]", 496 | "晚我能接受,早上6点是真起不来啊", 497 | "有,前段时间凌晨一点下面还有喇叭叫下去做核酸", 498 | "只要不封", 499 | "给他一逼斗,滚", 500 | "会不会摁电梯?不会坐就下去", 501 | "x总好 您也亲自坐电梯啊[看]", 502 | "抬头看一眼点下头 继续玩手机", 503 | "[绿帽子]", 504 | "当没看见。低头玩手机", 505 | "为什么要跟他沟通,又不认识[吃瓜群众]", 506 | "我一般就微微一笑就完事了", 507 | "首先如果在电梯里单独遇到领导,要保持自然的状态,不需要太刻意。如果遇到了领导就主动的先打招呼,如果领导以前不认识你,那么可以在领导面前简短地介绍一下自己的部门和名字,在自然礼貌的前提下保持适当的热情就可以了。", 508 | "很简单,我有现成的代码,但是是Go语言的,可以供你参考", 509 | "当你在应用层发送一个完整格式的数据流时,在底层其实并没有立即发送出去,而是当发送缓冲区满时发送,所以有可能就出现不完整格式的数据。在接收端底层也存在接受缓冲区的概念。这两者都会造成数据格式不完整的现象。解决方式就是在自定义的格式中加入区分标志位和单条数据的长度。其实可以衍伸到思考底层数据链路层是怎么分包,本质是一样的。", 510 | "打赢了吗", 511 | "开始无法接受新鲜事物的时候,比如智能手机,不懂如何操作啥的,还有电视遥控器之类的。", 512 | "父母在家做什么事情开始小心的询问我们的意见的时候[快哭了][快哭了]", 513 | "他们看东西要用放大镜了", 514 | "因疫情母亲关了开了11年的店,出去找工作,说很多人嫌弃她年龄超过45了。", 515 | "他们有白头发了,我也有白头发了。", 516 | "求职面试时,关于协商薪水的事,有五个必须谨记的要点:\n除非对方已做出决定,并表示要雇用你,否则不要和他们讨论薪水的事。\n千万不要主动提出你希望的薪水数目。\n面试前,先计算好你需要的薪资。\n面试时,从对方的言谈中尝试了解该职位的薪水是确定的,还是有协商的可能。\n面试前,预先对你想从事的行业、工作性质及该公司的薪资职等做些研究。", 517 | "1.知己知彼,先知道公司该岗位招聘的大概范围,然后结合自己的预期\n2. 手有底气,至少拿两个offer才好 argue,自己也更有底气。", 518 | "你不买,我不买,房价还能降两百。", 519 | "冲,固有资产不会亏的!", 520 | "不知道,反正我觉得有钱买了就是划算的,反正也不会降价。", 521 | "[撇嘴]请几天假休息休息", 522 | "追逐的过程,亦是失去的过程。[阴险]", 523 | "其实最简单的方法,就是学会角色互换,任何一个好的领导绝不会在工作中无缘无故与员工产生情绪冲突,凡事必有原因,首先反思哪里出现了问题,是工作方法、工作能力、工作态度等等方面,先进行个人的复盘工作。(不否认在个别公司中存在着领导自身修养较低的情况,这个需要另当别论)。其次,在情绪波动情况下,任何沟通都无法进行,因为情绪是有效沟通的生理条件,第一时间我们应该暂停工作找到适当的方式冷静下来,说明缘由,等心态放平后一定要另找时间进行有效沟通,解决情绪根源。", 524 | "先好好睡一觉,想太多也没用。情绪需要释放和宣泄,可以找真心朋友喝一顿,也可以找心理咨询师,我曾经就找个心理学专业的研究生聊天感觉就得到释放,一下子豁然开朗了。", 525 | "这边建议是自己调节,情绪上来了就别工作,找个适合调节好情绪的方式方法,比如来掘金摸个鱼儿,我就觉得很舒服", 526 | "一坐一整天", 527 | "0", 528 | "天天上班那么累 摸摸鱼多舒服哩", 529 | "锻炼不可能", 530 | "我身上早已烙下沉默燃烧后遗留下来的哀愁。[抠鼻]", 531 | "3-4次", 532 | "周末两天各一次", 533 | "5,6次,就是打篮球", 534 | "每天三次", 535 | "[悠闲]", 536 | "梦见几次就锻炼几次", 537 | "你还是那么爱笑", 538 | "看惯了长夜,仍然要向往天明。[加好友]", 539 | "能不上班吗", 540 | "当时我问的几点下班,加班多不多", 541 | "问问答不上来的题目", 542 | "公司的资金情况,能否达到我的期望薪资", 543 | "v50帮你解决", 544 | "如果是技术面试官,可以问问团队规模,人员间的协作流程,业务方向、技术栈……", 545 | "五险一金", 546 | "[便便]", 547 | "给多少钱", 548 | "钱给多少?", 549 | "在家更容易摸鱼", 550 | "已经半年了", 551 | "已经4天了", 552 | "问题是回家乡能不能混下去,如果能的话就回吧", 553 | "有钱了回家乡", 554 | "混不下去就回呗", 555 | "能差不多养活自己了 就回家吧 毕竟是根", 556 | "回家乡吧", 557 | "九分真实的话语是最纯粹的谎言。[炸弹]", 558 | "混就是了", 559 | "转行当保安", 560 | "[流泪]我30多了 感觉受到了伤害", 561 | "急啥,滴滴外卖一直等着我", 562 | "看你", 563 | "能苟一天是一天?", 564 | "先混着", 565 | "注意休息啊", 566 | "早点睡 晚安[摸头]", 567 | "[强]", 568 | "[熊吉]", 569 | "贡献开源代码", 570 | "黄袍加身,天天大鱼大肉为伴[看]", 571 | "写小说", 572 | "如果你工作了一段时间接接私活或者自己做点东西出来,如果你才毕业没多久,建议好好学习东西[看]\n如果硬要推荐什么兼职的话,我的建议是送外卖", 573 | "忘却并不是可怕的,而是你不肯。[委屈]", 574 | "不吃", 575 | "一般就是那个腮不吃.其它部位都吃", 576 | "吃蟹时应当注意四清除。一要清除蟹胃。蟹胃俗称蟹尿包,在背壳前缘中央似三角形的骨质小包,内有污沙;二要消除蟹肠,即由蟹胃通到蟹脐的一条黑线;三要清除蟹心,蟹心俗称六角板;四要清除蟹腮,即长在蟹腹部如眉毛状的两排软绵绵的东西,俗称蟹眉毛。这些部位既脏又无食用价值,切勿乱嚼一气,以免引起食物中毒。", 577 | "那可就多了,建议只吃钳子[看]", 578 | "没有逃不脱的厄难!如果有,那是因为还没找到那合理的理由![囧]", 579 | "躺床上刷手机", 580 | "学习[看]", 581 | "生日快乐,加油", 582 | "有钱就行", 583 | "南航?自信的女生最美[呲牙]", 584 | "怎么领取实物奖励?", 585 | "邀请完毕了 怎么添加收货地址", 586 | "每次能发布下参加人数,做个人数统计曲线看看", 587 | "垃圾活动,国内除了会邀请,砍价,拉人头还会什么??会出点创意活动么?例如出个解迷题什么的。天天搞这些。真屎", 588 | "五个人就可以吧", 589 | "yes", 590 | "你们上线不做测试的吗?注册好怎么都没有记录,还手动填写,要是拉200个人还填写200次吗?", 591 | "如果新用户邀请没有记录,建议可以尝试以下三个方法噢:\n方法一:新用户下载并且登录后,可以尝试再次让新用户点击邀请链接\n方法二:如果新用户的手机系统是 iOS 16,在首次启动并登录,请点击允许使用粘贴板,老用户会产生邀请记录\n方法三:如果以上两种方式都不行,请填写反馈问卷,我们会在活动结束后人工核实,请放心!\n问卷:https://wenjuan.feishu.cn/m/cfm?t=sgZ6wZwMpLGi-8jh4\n\n提交截止时间:10月31日晚上12点", 592 | "你们这个统计是不是有什么问题 从来没用过绝境的用户通过我都链接下载app注册 为什么不提示在我的邀请列表", 593 | "算了,奖品让给你们小🤣🤣🤣", 594 | "哦?", 595 | "默默问一句,矿石做什么的?", 596 | "任务在哪看?", 597 | "现在都是搞推广吗?", 598 | "[可怜]", 599 | "《将寒气传递到每一个人》", 600 | "我既不想伤害别人,也不想被伤害[发呆]", 601 | "电子信息吧", 602 | "软件工程吧。", 603 | "真是的,明明第一次做人,却默契的装作了第二次的模样。[惊恐]", 604 | "希望只在一瞬之间,而黑暗,永恒。[斜眼]", 605 | "大气的人不会因为这点小事来和你生气。[流汗]", 606 | "只有破碎的心才有伤人的棱角。[快哭了]", 607 | "会睡着吧", 608 | "牛哇", 609 | "优雅", 610 | "写代码", 611 | "一样[快哭了]", 612 | "做开源", 613 | "一上班就知道摸鱼[奸笑]", 614 | "[看]来,一起喝一杯", 615 | "健身 游戏", 616 | "公司掏钱?", 617 | "我也是加了一天班", 618 | "每个细节只需要再好一点点,最终结果将会更加完美。[石化]", 619 | "[发怒][发怒][发怒]我要上车", 620 | "本人在此澄清两点\n①我擅长骂人,平时不爱骂人的。脾气很好的[惊喜][惊喜][惊喜]\n②今晚停电之后和大家打几局游戏,打完以后才十点,闲的没事,想起来之前约好了吵架,就去吵了一顿,我可不是找人撒气的坏女人[泣不成声][泣不成声]", 621 | "[打脸]", 622 | "haode", 623 | "你这活动20号开始你就出来那么早干什么?19号邀请了五个你现在说20号才开始?", 624 | "还是小铺的活动好", 625 | "怎么选钻石还是盲盒呀", 626 | "盲盒可以选的吗", 627 | "麻烦把我的IP盲盒给我,谢谢。", 628 | "15w还是盲盒", 629 | "邀请完了在哪填写地址啊", 630 | "真的很无语 拉人都不显示的", 631 | "1000矿石?笑死了", 632 | "[胜利]", 633 | "想问下流体熊摆件怎么领取呢[发呆]", 634 | "奖励可以叠加吗?", 635 | "昨天成就明天,那就努力把今天变成昨天,共同成就美好明天。[听歌]", 636 | "好看", 637 | "时间,捉摸不透。[左]", 638 | "驱穹不得反之焚文,其欲直达天听。[愉快]", 639 | "你们上线之前不测试吗。邀请ios有记录,邀请android怎么没有记录", 640 | "1024 是贬义词还是褒义词???还是中性词,比较喜欢工程师这个词", 641 | "1024之前分享朋友圈的活动呢?", 642 | "我今天还没填写报名问卷就拉了两个小伙伴 这个是能计算的吗 间隔时间很小", 643 | "牛的", 644 | "邀请首次下载并登录的老用户 是否也算呢?[疑问]", 645 | "bgm", 646 | "买啥了", 647 | "秃顶严重啊你", 648 | "就不怕给同事发现吗[泣不成声]", 649 | "当你熬过了这段时间你会看到一个全新的自己", 650 | "没事,没事,都会好起来。", 651 | "年纪这么小就给自己这么大的压力呀,这样步入社会后会很累的", 652 | "熟人介绍的", 653 | "你是我第一个点赞", 654 | "炒粉一号", 655 | "巧了我也天天坚持看我的文章", 656 | "( ̄o ̄) . z Z", 657 | "刚下班", 658 | "???你删除了下次从哪里找,真的要删除也得先从nodemodules里复制出来再删除,但是最好别这么干,想自己改包建议使用patch-package", 659 | "不知道", 660 | "我们都很擅长口是心非,但又希望对方能有所察觉。[坏笑]", 661 | "上早读呢刷掘金给我看这个[流泪]", 662 | "蛮油的", 663 | "盛夏里,溺于深绿。[红包]", 664 | "英雄所见略同[呲牙][嘿哈]一直很喜欢这句话: 放弃不难,但坚持一定很酷。", 665 | "👍", 666 | "663", 667 | "早早早啊", 668 | "我已经喝上茶了[吃瓜群众]", 669 | "钻石换的吗,也太亏了,多存会儿换个好的", 670 | "国庆节收到了[奸笑]", 671 | "[嘿哈]", 672 | "美国吗", 673 | "长沙,i了", 674 | "小时候,我妈说我的手指长,将来能当钢琴家,然后我成了码农[尴尬]", 675 | "下一个更乖", 676 | "[加好友]", 677 | "撒狗粮真过分", 678 | "醉翁之意不在博物馆", 679 | "???晒对象?", 680 | "早点脱单吧,我怕你孤独终老,却又长命百岁。[奋斗]", 681 | "若不爱你,死生无地。若不爱你,青魂可离。[抓狂]", 682 | "这一次,我试着向你奔来,不问归期。[送心]", 683 | "老哥买房子了?", 684 | "挺好的", 685 | "[去污粉]", 686 | "还好我大学生", 687 | "相比之下这是个好消息", 688 | "你居然有工作。我连工作都没有", 689 | "iOS就是个垃圾", 690 | "我的可以啊", 691 | "ios系统不让,只有播放视频可以悬浮", 692 | "软考高级系统架构师?", 693 | "[白眼的狗]", 694 | "去我主页帮我改改bug[大哭]", 695 | "给这只猫一点颜色瞧瞧[发怒]", 696 | "是这样[流泪]原创太难了", 697 | "已报名", 698 | "想要键盘[呲牙]", 699 | "我有保温杯,想要鼠标垫", 700 | "所以矿石和杯子会同享吗?还是只能选一个", 701 | "@沸点小助手 请问升级挑战一定是要带上掘金的文章链接吗?不可以是非掘金的一些书籍和文章吗?", 702 | "已报名[呲牙]", 703 | "既然大家要阅读,那我在这贴一篇被推荐的文章不过分吧[吐舌]\nhttps://juejin.cn/post/7154059361604599844?share_token=d8120e7b-38b5-48b0-8faa-b43a486a2442", 704 | "来咯", 705 | "可以在活动开始的当天给报名成功的同学发送站内信吗,要不然会忘记的", 706 | "已报名!", 707 | "文章都是十天半月之前的,文章更新太慢了", 708 | "还好没错过", 709 | "有漏洞啊 比如读书笔记 没有具体要求 也就是说我七天发同一篇也行,或者我随便乱打五十个字也行,而且没有明确性表达 也没有限制条件 这样完全可以组织一批人 刷杯子 转手买个 10块钱一个也是存利润", 710 | "天下没有不散的宴席,那就放下过去,憧憬未来![震惊]", 711 | "吃的好清淡呀![呲牙]", 712 | "如果你是我该多好,那你就会知道我有多难过,多喜欢你。[惊喜]", 713 | "你管这叫火锅?", 714 | "https://bytedance.feishu.cn/docx/doxcn82A3onIowgW8SibnMtdNzg想问问这个活动怎么没有开奖也没收到消息", 715 | "为啥链接点进去是空白的,报不了名呀?", 716 | "有没有什么技术大佬的群,能拉我进去吗", 717 | "虎虎生威保温杯可以泡枸杞吗?", 718 | "键盘dd", 719 | "[吃瓜群众]卷起来", 720 | "到点上班,到点下班", 721 | "期待键盘,虽说我刚买了一个,但是作为成年人,我全都要", 722 | "[睡]", 723 | "不知道啊", 724 | "你再说啥???????、", 725 | "没人吧,好像", 726 | "你说呢[摸头][摸头]", 727 | "附议,虽然也没那么多矿石[看]", 728 | "我看到一个剧,大学生投标的项目代码,导航条出错啥的。暂停看了下代码,真是前端。", 729 | "???搞得我也想看看", 730 | "话说显示中真有男主这么牛的人吗[吃瓜群众]", 731 | "为什么", 732 | "为啥", 733 | "周一", 734 | "虎皮鸡脚吃不成,[流泪][流泪]", 735 | "被局限在一隅之地,天天打螺丝", 736 | "你不觉得很酷吗😎", 737 | "[色][色][色]", 738 | "我爹呢", 739 | "😎🤤", 740 | "我超然", 741 | "啵啊", 742 | "晚晚菌屁用没有", 743 | "啵阿", 744 | "你来这是想你来这是因为什么不用我多说了吧😃", 745 | "😎", 746 | "好多人啊,都熬夜是吧🤨", 747 | "我超 然", 748 | "[色][色]", 749 | "摸鱼也要讲究仪式感", 750 | "666 别卷了", 751 | "老板流血😂", 752 | "这不得上大分的节奏", 753 | "玩游戏就在加班。", 754 | "加班我就玩游戏", 755 | "今夜适合做点啥", 756 | "我还拍了几张", 757 | "根本就没看。铁窗泪", 758 | "守口如瓶,包括对自己。这是一种美德。[流泪]", 759 | "月食", 760 | "今晚适合做点啥", 761 | "我也是没看到啊", 762 | "纵观世界无非就两件事最火:断章取义和美名其曰。[嘴唇]", 763 | "没看月亮吗", 764 | "别买", 765 | "深有体会,而且我们mvp居然还是集成的第三方封装的基类,动都不敢动\n写接口类的,有个建议,自己写一个本项目的代码生成插件,一键生成mvp的所有类,github上有挺多这种插件,找一个对着项目来修改就好", 766 | "使用CTE", 767 | "先这样再那样就可以了", 768 | "睡了没? 你的程序出bug了, 赶快起来改,[比心]", 769 | "没用,应该休息", 770 | "[弱]", 771 | "人类最大的敌人是傲慢,其次是无知。[偷笑]", 772 | "……", 773 | "如果是真的我希望是假的。如果是假的我希望是真的[舔屏][舔屏][舔屏]", 774 | "怎么说", 775 | "心静如水看风景就是美", 776 | "有点霸气的猫猫,好想摸一把 o(=•ェ•=)m", 777 | "[给力]", 778 | "我想,但我不配", 779 | "然后最后结果就像微软的文档一样,每个字都认识,怎么连起来就看不懂了", 780 | "不难,你来", 781 | "不难", 782 | "职务太多了吧", 783 | "头痛是哪位", 784 | "下一站哪里", 785 | "关咱们啥事", 786 | "Yes", 787 | "🈶️", 788 | "我这边也是,上面的人写的代码有点水呀", 789 | "不影响下班,正常发工资就好", 790 | "让他把工资v你50% 以后你罩着他", 791 | "我草和我有点类似", 792 | "年后润呗", 793 | "跑路", 794 | "[握手]", 795 | "我,你?", 796 | "没货了,这个好像", 797 | "顿悟", 798 | "[击掌]", 799 | "回去吧", 800 | "这是几个钟,,,", 801 | "加钟加钟[害羞]", 802 | "仍在加班ing", 803 | "打工人,好难", 804 | "唉,我回家上了4个钟", 805 | "先苟着", 806 | "抱抱", 807 | "难啊,完全无人问津😭", 808 | "漂亮", 809 | "微笑着挥手再见,但内心却却深知,以后不会再相见。[礼物]", 810 | "做着", 811 | "必须煎饼果子啊,便衣警察都。做。这个了", 812 | "网管[舔屏][舔屏][舔屏]", 813 | "当保安", 814 | "重启就行了,再不行给你换台机", 815 | "我怎么能倒下,我身后空无一人。[加好友]", 816 | "网管", 817 | "干活儿,网络入门难,如果入门之后,绝对根正苗红的架构师。", 818 | "感觉周围的人and师兄师姐都去弄前后端了,很少人弄网络工程捏", 819 | "网管[奸笑]", 820 | "网络安全工程师?[疑问]", 821 | "能写个类似vue ,react 框架,出去很容易的", 822 | "说下我认知中的。\n能做门户、OA、小程序、APP(或者能短时间上手)。\n熟悉React、Vue至少一种框架及其相关技术栈。\n熟悉至少一种CSS预处理器。\nJS 熟悉ES6+常用语法,会TS更好。\n能基于 Node 环境简单写点脚本。\n熟悉NPM常用操作,自己能编写发布包。\n熟悉自己技术栈下构建工具的常用配置。\n独立在无需频繁查阅资料的情况下,写个简单但功能完备的SPA应用。", 823 | "[愉快]", 824 | "是不是小公司面多了[看][看]", 825 | "哪里", 826 | "别跟我谈感情,多伤钱啊![流汗]", 827 | "辛苦了", 828 | "还得是你啊 提加班我早就run了", 829 | "每天用鼻子呼吸很难吗", 830 | "有呀,你加班么?", 831 | "配置没读到呗", 832 | "日惟东来,山海不阻,晴雨无伤。[熊吉]", 833 | "以前搞了一大堆这样的系统", 834 | "有什么收获吗", 835 | "做个睡眠疗养,我也有这种情况,是不是还经常头晕或者头痛", 836 | "加班ing", 837 | "刚下班到家", 838 | "加班中", 839 | "妙啊", 840 | "美死了。", 841 | "太棒了,谢谢分享。", 842 | "可以呀,铁子", 843 | "有手就行", 844 | "框架而已,有手就行。[黑脸]", 845 | "绘守御之明信兮,书香随之丰年。[舔屏]", 846 | "先学java", 847 | "可以玩的 排队做做核酸就行", 848 | "[思考]", 849 | "这俩确实不错,小说也很好看", 850 | "我现在觉得我快要被裁了,居家一个星期了,感觉像是被孤立了一样,说不定封控结束我就g了", 851 | "不懂你们在煎熬和纠结什么,我也经历过两次裁员,都有赔偿,美滋滋爽得很;有一家还是个垃圾公司,被裁了直接解脱,简直爽飞。。。裁员根本不可怕,可怕的是下家难找,找工作是真的烦。", 852 | "用开水隔着包装袋泡一会,然后开袋拌上料汁就可以吃了", 853 | "用嘴巴吃的呢宝贝", 854 | "泡几分钟,倒掉水,然后加调料包搅拌", 855 | "有说明啊", 856 | "袋子上有应该说明吧,能泡的话,煮也行啊", 857 | "就跟拌面一样,加开水泡软,倒水加料拌匀香喷喷", 858 | "连袋子扔水里煮,煮软了捞出来装盘就行", 859 | "我吃过 煮了捞出来 拌面吃就好", 860 | "开水泡五分钟以上,沥干水放调料包干拌", 861 | "我都是泡着吃的,红油的我只买过一次。麻酱凉皮超级好吃。", 862 | "加水煮一会,捞出来加佐料就行了,感觉还可以[奸笑]", 863 | "调休上班,具体调到哪天休息待定[撇嘴]", 864 | "可行,只要钱到位,玻璃全干碎", 865 | "油钱,过路费等等不要钱啊。", 866 | "财务自由了 咋样都可行", 867 | "可行", 868 | "卷死", 869 | "看你头像都可有经验了么", 870 | "梦想脱胎于现实,现实由梦想所化。[碰拳]", 871 | "好好好", 872 | "开始了!!", 873 | "来啦", 874 | "棒棒哒", 875 | "6666", 876 | "开始了", 877 | "占位", 878 | "这个可以 我要个盲盒就好", 879 | "占个位置", 880 | "不错的活动", 881 | "想要毯子只能集7-9个圈子,但是想要抽大奖要10个,咋办呢🥺", 882 | "毯子[奋斗]", 883 | "这次要冲一波", 884 | "冲冲冲,我要写一篇搞笑小说,写悬疑小说", 885 | "冲~", 886 | "你的头像[傲慢][傲慢][傲慢][傲慢]", 887 | "开庭的时候不要跪着求我鸽鸽", 888 | "小黑子卤出鸡脚了[吃瓜群众]", 889 | "只因![看]", 890 | "我这么无聊,几乎从不主动的一个人也想为你变得有趣呢![赞]", 891 | "都啥年代了 还用这种淘汰的技术?", 892 | "很服,就不能用个别的元素,就非span不可了", 893 | "有啊", 894 | "刚又看了一下js中的父节点操作子节点,哎似乎一定要给span绑定类名,毕竟太多span标签了。也就只能给要操作的span打类名了。", 895 | "睡不着,上来刷沸点", 896 | "nono", 897 | "看世界杯", 898 | "还早还早[呲牙]", 899 | "休息?", 900 | "睡觉是不可能睡觉的,在地下有的是时间睡[看]", 901 | "浪漫", 902 | "这是啥手机拍的,好看", 903 | "冲个杯子[呲牙]", 904 | "好像有个sandbox可以规避", 905 | "有vue3和禁用有什么关系[白眼的狗]", 906 | "哈哈哈哈哈", 907 | "打卡记得带话题[看]", 908 | "还有中国裁判怎么说", 909 | "没事,我不看", 910 | "干起来", 911 | "为错误停驻是件可悲的事。[拳头]", 912 | "为什么是你制定 而不是他人", 913 | "有趣", 914 | "不会", 915 | "??哈哈哈哈哈哈", 916 | "假球,一定是假球,退钱", 917 | "还好吧,本来实力差距就不是很大,森保一战术很奏效,日本队士气也很足[看]", 918 | "前场不在意,后场顶不上", 919 | "换人之后马上状态不一样了。德国队也是前场运气不太好~后场太大意~", 920 | "你回头,我就在身后。[撇嘴]", 921 | "首页刷到的,好好好[奋斗]", 922 | "起码自己做的,肉吃着放心", 923 | "因为刚好遇见你,原来你也在这里……[生病]", 924 | "好棒", 925 | "那家公司?蹲一手[呲牙]", 926 | "起伏这么大么[捂脸]", 927 | "[比心]", 928 | "肚子饿了", 929 | "那两锅黑乎乎的,一看就不清淡。", 930 | "想吃,想去", 931 | "每周四发版,才下班", 932 | "V 我啊", 933 | "饭堂伙食不错", 934 | "深夜看到这个也睡不着了", 935 | "暖气空调走起来", 936 | "看到现场球迷都不戴口罩羡慕不?我们啥时候才能回到这场面", 937 | "买了否冷?", 938 | "不懂球的人更没法理解啊", 939 | "忌寒北雁离难挽。[比心]", 940 | "男孩子一条牛仔裤穿好几年", 941 | "是啊,去年的今年都穿不上了,好烦啊[看]", 942 | "在家自行就业吧。年前回不来了。", 943 | "上班12小时,休息12小时", 944 | "没希望了", 945 | "北京都居家了 回来也没砖搬啊[灵光一现]", 946 | "😂", 947 | "周六啦👀", 948 | "祝愿每日会有太阳为你升起,把你当做诗的最后一行。[白眼]", 949 | "若不爱你,死生无地。若不爱你,青魂可离。[骷髅]", 950 | "不溯往事,不念将来,如此,安好。[可怜]", 951 | "看完", 952 | "看起来就好吃", 953 | "你看这样就跑起来了", 954 | "没解决的话我可以看看", 955 | "你倒是给个代码链接或者留个联系方式啥的", 956 | "我有源代码和部署文档,怎么发给你?", 957 | "npm i", 958 | "不错呀😀", 959 | "真好", 960 | "免费提供的吗", 961 | "这时隔离餐?", 962 | "一样,从头再来,今天第二天🌚", 963 | "从头在来", 964 | "从头再来", 965 | "要不就持之以恒要不就前功尽弃,选一个", 966 | "你怎么才两天", 967 | "解析的时候应该解析成一个class", 968 | "基操[无辜呆]", 969 | "可以的", 970 | "没这样用过 可能没这个场景", 971 | "不是一直这样写吗", 972 | "额,你才知道吗?我以为这是大家都知道的,v2就可以了[我想静静]", 973 | "是当成class='类名1 类名2'运行的嘛[红脸]", 974 | "额,可以的", 975 | "能", 976 | "淤青是常事啦,我昨天练招老是被砍腿", 977 | "5600加个1660足够了", 978 | "太阳纵然温暖热烈,但我更偏爱温柔如玉的你。[流泪]", 979 | "我都被封一个月了。[流泪]", 980 | "封寝?学生?", 981 | "刚拿出来,结果是砖头了", 982 | "枯燥的太阳因你而变的温暖,脆弱的心灵因你而变的坚强。[不看]", 983 | "刚拿出来 关机了,,,,", 984 | "我前天被裁了[看]", 985 | "恭喜。", 986 | "爽", 987 | "感觉这条沸点很多人也是都是已读不回~~", 988 | "框架和ES2022有啥关系 标准每年都会更新啊 现在还有很多proposal呢", 989 | "又来骗我的矿石了[吐舌]", 990 | "拒绝赌球,从我做起", 991 | "竞猜的是常规时间内,不包括加时赛和点球大战", 992 | "每场奖池里面多少矿石,是固定的?还是按什么计算方式得出的?", 993 | "又来骗我的矿石", 994 | "淘汰赛有点球大战喔 有考虑这种情况吗[思考]", 995 | "拒绝赌球从我做起", 996 | "必须猜中比分+队伍吗", 997 | "牛啊牛啊", 998 | "什么时候可以兑换下注卡", 999 | "冲\n[微笑]", 1000 | "能一条沸点参与所有竞猜吗?", 1001 | "已经被回收2000了", 1002 | "赌狗一无所有", 1003 | "冲鸭", 1004 | "强[看]", 1005 | "应届走校招是最好的选择,我没走校招,确实后悔", 1006 | "放开我吧,求求你们,放我走吧,让我离开[哭笑]", 1007 | "[抱拳]", 1008 | "呦呦呦 切克闹", 1009 | "这个不用上天台~", 1010 | "能有这本事,何不支持一下公益事业,体彩", 1011 | "矿石,你在这看不起谁呢,昨晚日本2:1 40块赚1000,在这跟你过家家 玩泥巴[奸笑]", 1012 | "猜比分就过分了吧!要是能猜中比分就直接去体彩了,谁还在这搞矿石啊[撇嘴]", 1013 | "牛蛙牛蛙", 1014 | "哟呵。", 1015 | "猜对了赢一个大逼兜子,可以来我这领。[看]", 1016 | "德国战车翻车了[绝望的凝视]", 1017 | "猜比分有点过分了,强烈要求参考体彩机制", 1018 | "👍🏻", 1019 | "坐等开奖", 1020 | "自己当老板就可以了", 1021 | "始无弱,盛极衰,和以中之大同。[v5]", 1022 | "有一些情感,没办法辜负它。[右哼哼]", 1023 | "喝水", 1024 | "上厕所总行吧", 1025 | "把他眼睛蒙上", 1026 | "漂亮,放假使我快乐", 1027 | "光,火交错,诞生了夕阳。[心碎]", 1028 | "在哪呀", 1029 | "在哪啊,我也想看", 1030 | "你家在哪,我这就来。", 1031 | "百废待兴长久事,千灯如逝长庚驰。[耶]", 1032 | "来互关佬", 1033 | "来互关咯[灵光一现]", 1034 | "这么久才写了三篇文章,没机会了[捂脸]", 1035 | "羡慕", 1036 | "我是小摸鱼,专注摸鱼办提醒", 1037 | "生命如意志永存,青春永远年轻。[抓狂]", 1038 | "一眼11/11 呀", 1039 | "11÷11", 1040 | "太不好的消息", 1041 | "囤点零食", 1042 | "[v5]", 1043 | "你这个饭做的还可以嘛[比心]", 1044 | "我可是个面壁者,怎么能随便告诉你呢?[谢谢]", 1045 | "你好", 1046 | "正因为一无所有,才可以拥有一切。[看]", 1047 | "确实", 1048 | "[憨笑]", 1049 | "每个Vue组件实例被创建后都会经过一系列初始化步骤,比如,它需要数据观测,模板编译,挂载实例到dom上,以及在数据变化时更新dom。\n\n这个过程中会运行叫做生命周期钩子的函数,以便用户在特定阶段有机会添加他们自己的代码。\n\n生命周期主要分为几个阶段:创建前后、挂载前后、更新前后、销毁前后", 1050 | "开始执行 到渲染完成 算是一个生命周期 (应该没错吧/心虚)", 1051 | "。。。", 1052 | "国内太卷太乱 还不如多写一个项目实在", 1053 | "Vue 的生命周期指的是 Vue 实例从创建到销毁的过程。它包括了以下几个阶段:\n\n 1. 创建期:在这个阶段,Vue 实例的属性和方法都会被初始化。\n 2. 挂载期:在这个阶段,Vue 实例会被挂载到 DOM 上,此时实例中的 `template` 会被编译成 `render` 函数,并生成虚拟 DOM。\n 3. 更新期:在这个阶段,Vue 实例的数据发生了改变,虚拟 DOM 会被重新渲染并更新到真实的 DOM 上。\n 4. 销毁期:在这个阶段,Vue 实例从 DOM 上被移除,并销毁实例。\n\n在每个阶段中,Vue 实例都会触发一些特定的事件,给开发者提供了执行自定义操作的机会。例如,在挂载期中,Vue 实例会触发 `beforeMount` 和 `mounted` 两个事件,分别在挂载开始和挂载完成时被调用。", 1054 | "undefined", 1055 | "是这样的,但是不利于个人成长", 1056 | "这个是常态", 1057 | "纵天下几变春秋,我依旧还是我。[玫瑰]", 1058 | "[绝望的凝视]", 1059 | "谷歌搜索是一种强大的信息搜索工具,您可以通过以下方式使用它来查询资料:\n\n1. 打开浏览器,访问谷歌搜索网站:https://www.google.com。\n\n2. 在搜索框中输入您要搜索的关键词或短语。\n\n3. 按下“回车”键或点击搜索按钮,即可查看搜索结果。\n\n4. 搜索结果中,您可以浏览多个网站并点击链接以查看详细信息。\n\n除了上述步骤,您还可以使用谷歌搜索的其他功能来缩小搜索范围或提高搜索精度。例如,您可以使用引号将关键词短语括起来,以搜索完全匹配的结果;您还可以使用减号将不需要的关键词排除,以减少搜索结果数量。有关谷歌搜索的更多信息,您可以在网络上搜索“谷歌搜索使用技巧”等相关话题。", 1060 | "有几个方法可以提高工作效率。首先,建立一个明确的工作计划可以帮助你更好地组织你的时间和精力,并且能够更有效地完成任务。其次,尝试使用一些时间管理技巧,如番茄工作法或把工作分解成多个小目标来完成,可以帮助你更好地利用时间。此外,创造一个适合工作的环境,并尽量避免分心,也能提高工作效率。还有,设定合理的目标并为它们设定时间表,也能有助于提高工作效率。", 1061 | "人生四然:来是偶然,去是必然,尽其当然,顺其自然 ...[太阳]", 1062 | "老哥牛批!\n我们都是想知道如何快乐摸鱼", 1063 | "就要死皮赖脸的喜欢你[流泪]", 1064 | "不会去爱,那就别爱,天有注定,缘也会散。[加好友]", 1065 | "抱歉,我不能评价其他模型的能力,我只能说我自己会尽力回答你的问题。如果你有任何问题,请随时问我,我会尽力回答的。", 1066 | "[流泪]", 1067 | "问chatGpt", 1068 | "即开心又失落,开心时可以拿一笔钱,失落是要离开熟悉的环境,去适应新环境😂", 1069 | "敢不敢吃素", 1070 | "敢不敢吃点素", 1071 | "这也太香了", 1072 | "好难受", 1073 | "说的就是我,N+1 OR 调岗降薪 。我选择苟着了 降薪转岗了,因为年前工作真不好找,虽说疫情放开了,年后不知道会怎么样呢", 1074 | "我谢谢你哈", 1075 | "一直想走,终于等到n+1了", 1076 | "(内心OS:忍着不笑真难啊。。。)", 1077 | "开心😁", 1078 | "喜极而泣,拿钱回家过年", 1079 | "你若愿爱,我若无悔。[加好友]", 1080 | "这牛腩都不带萝卜的吗[看]", 1081 | "看他们假装深情不久伴。[震惊]", 1082 | "为什么我明明什么坏事都没有做,却要被那样看待?[咖啡]", 1083 | "我是阴性[泪奔]。我做了7次核酸,7次呐 才有结果", 1084 | "羊了个羊", 1085 | "心血来潮的时候,总会有那么几人要顿悟的。[哭笑]", 1086 | "是使用运气值了吗?", 1087 | "心节以信居神,自为神上;视异义者无知。[吐血]", 1088 | "即使这一切如此虚假,那又如何?[思考]", 1089 | "挺豪", 1090 | "挺好", 1091 | "还可以吧", 1092 | "买自己喜欢的车才是最重要的。不论是外观、性能,还是其他的。", 1093 | "买混动雅阁!回头你会来感谢我的", 1094 | "买!", 1095 | "成品不让看看[呲牙]", 1096 | "大郎", 1097 | "🐮", 1098 | "中药?", 1099 | "我怀疑掘金开始搞机器人了,评论的都是不知其所以然的话语", 1100 | "保温效果很差[流泪]隔热也不好,开水装进去烫手", 1101 | "看起来蛮结实的", 1102 | "半天", 1103 | "路边摊才是人家烟火!", 1104 | "我管你身体壮硕,能够吃苦耐劳,头发茂密不怕掉,天生精力充沛,想必应该是百年难得一见的天命打工人。\n身体壮硕:啥活都能干\n吃苦耐劳:每天吃馒头都不影响进度\n头发茂密:那必定能多熬夜\n精力充沛:头发不掉完,熬夜不休止\n此为天命打工人", 1105 | "机器人???", 1106 | "看着点赞数 全是脚本 这不封了", 1107 | "额 有一股塑料味 挺大的", 1108 | "它们喜欢什么颜色的麻袋?", 1109 | "挺好看的", 1110 | "12月14日3:00阿根廷vs克罗地亚比分为1:2", 1111 | "阿根廷vs克罗地亚=2:1", 1112 | "嘉年华参加人数太多,取消奖品", 1113 | "买菜的袋子有了", 1114 | "这个不错", 1115 | "打个卡", 1116 | "12月14日3:00阿根廷vs克罗地亚比分为3:2", 1117 | "为什么嘉联华不开奖", 1118 | "当庄家加大筹码,是不是要割韭菜了", 1119 | "冲!", 1120 | "为什么嘉年华不先开奖", 1121 | "嘉年华什么时候开奖呀", 1122 | "来北京,马上过去", 1123 | "问我山哥,宏哥,进哥,娟姐", 1124 | "先羊了", 1125 | "掘友, yyds", 1126 | "巧了,症状明显,抗原阴", 1127 | "这么快?", 1128 | "巧了,我核酸刚出来 我也🐏了", 1129 | "还真是", 1130 | "当工具书看啰。讲太细了不太友好", 1131 | "真好,和我一样有那么几本一直没舍得看的书", 1132 | "好家伙,我的C++ primer一个下场", 1133 | "爱笑的人运气不会太差,所以要开心点", 1134 | "我以为你是男生,额,我太不礼貌了,对亩起😇", 1135 | "你已经说完了一言", 1136 | "早晚都得阳 问题不大[奸笑]", 1137 | "数据格式?", 1138 | "看不懂", 1139 | "什么鬼", 1140 | "路径吗", 1141 | "[灵光一现][呲牙][灵光一现][呲牙][灵光一现][呲牙]", 1142 | "我四天就基本痊愈了, 高烧都没发, 用药仅喝了几包板蓝根, 美女快来找我kiss, 免费!!", 1143 | "为什么你不觉得是因为人体质差异导致而是病毒差异导致?", 1144 | "V我50,我来感染你,只流鼻涕,打喷嚏[看]", 1145 | "没赚就是亏", 1146 | "不急,周五再说[捂脸]", 1147 | "这孩子不错", 1148 | "搜集疯狂星期四文案是吧", 1149 | "不是已经告诉你了吗 出错的位置🐶", 1150 | "矿石[微笑],我40连抽全是矿石", 1151 | "贴纸警告", 1152 | "贴纸", 1153 | "抽到新冠了。", 1154 | "抑郁云[奸笑]", 1155 | "我才是九宫格中的一个", 1156 | "没有用的,自己防护的再好。同事不自觉,路上的人不自觉,分分钟背感染", 1157 | "你不测就不🐏了", 1158 | "同求", 1159 | "叶带带我", 1160 | "现在工作好找不", 1161 | "羊了?", 1162 | "都要求一个月了,那就没办法了。", 1163 | "劳动法规定一个月,如果你是辞职申请就职企业可以不予通过", 1164 | "研究世界杯冠军[酷拽]", 1165 | "监督别人学习", 1166 | "摸鱼", 1167 | "✈️", 1168 | "有啊,彩票号码", 1169 | "看看电影?做做手工?滑滑雪?算吗", 1170 | "是啊,多吃多睡多运动", 1171 | "我买的马扎子", 1172 | "这么优秀的吗", 1173 | "超级好看", 1174 | "成长是需要代价的", 1175 | "所以你有没有咬两口", 1176 | "说的不对啊,白开水是有效", 1177 | "喜欢阴阳怪气的该去知乎[无辜呆]", 1178 | "我们核酸也收费呀", 1179 | "什么逻辑?欠你的是吧?", 1180 | "没开放前,你感染过几次啊?", 1181 | "瞎说啥大实话[奸笑]", 1182 | "阳了几天了呀", 1183 | "[奸笑]", 1184 | "人生辽阔,不要只活在爱恨里", 1185 | "你行不行啊,细狗[看]", 1186 | "错了", 1187 | "错!", 1188 | "那你可猜错了", 1189 | "已经2:0了", 1190 | "宇宙山河烂漫,生活点滴温暖", 1191 | "跟一个", 1192 | "做一个只记得快乐和知识点的人", 1193 | "加一", 1194 | "真惨", 1195 | "你这喜🐑🐑。不错。", 1196 | "多休息,多喝水,多吃水果。你这是aoa图,哈哈,我熟悉🤓", 1197 | "console一下。哈哈。那个简单。断点还是牛一些", 1198 | "为啥我的断点走着走着就进runtime了", 1199 | "如果解决不了就重写[憨笑]", 1200 | "没有没有运气好说不定两三天就好", 1201 | "准备好5天躺吧", 1202 | "我等必将复起,古木已发新枝。", 1203 | "好爽", 1204 | "哈哈哈哈", 1205 | "哈哈哈哈哈哈", 1206 | "工作日", 1207 | "这是什么?", 1208 | "休息日吧 估计工作日会打", 1209 | "我上个楼梯都140 你这心率厉害了", 1210 | "555", 1211 | "今天你杨康了吗,还是杨康了", 1212 | "在杨的路上", 1213 | "简历怎么写?这段经历写不写?🌝", 1214 | "去年的flag完成了没", 1215 | "笑一笑有什么大不了,明天会更好", 1216 | "没有安慰奖等于没有奖[尬笑]", 1217 | "嗯哼嗯哼", 1218 | "给力", 1219 | "身体重要,疫情当前早睡早起,下次再参加", 1220 | "我来了,冲呀", 1221 | "这个页面怎么做的", 1222 | "爱了爱了", 1223 | "已参加", 1224 | "生成海报 也不提示下成功了 搞得我相册好几十张🐑", 1225 | "冲冲冲,大家快写", 1226 | "切记沸点要带话题哈。各位。①分享你在掘金的独家记忆海报,②聊一下你 2022 年立下的 flag 的完成情况,③聊聊你 2023 年对自己的期许立下flag(期望是不倒的 flag)", 1227 | "来啦!冲冲冲![嘿哈][嘿哈][嘿哈]", 1228 | "已参加 勿相忘", 1229 | "来了,来了", 1230 | "这是加的什么班?", 1231 | "牛批[吐舌]", 1232 | "今天这是加班", 1233 | "为什么今天上班?", 1234 | "今天不是假期吗", 1235 | "加班ing 7.30 弄不好9.30", 1236 | "今天要上班?", 1237 | "等我一块,六点下班", 1238 | "今天不是公休吗 ?", 1239 | "等等我啊 我还有二十分钟", 1240 | "我也是,冲!", 1241 | "如果统计数据指标的话~就会发现问题了~", 1242 | "重新定义bug", 1243 | "一个人养活了测试组系列", 1244 | "最后绩效统计是有bug数指标的", 1245 | "你是懂上班的", 1246 | "你是懂合作双赢的[强]", 1247 | "故意点“不予解决”,然后测试小姐姐就会过来温柔的打我几巴掌了[皱眉]", 1248 | "好同事", 1249 | "你是个伟人", 1250 | "来", 1251 | "打钱!", 1252 | "[拥抱][拥抱]", 1253 | "已经在上了,并且在加班[流泪][流泪][流泪]", 1254 | "你这头像干嘛呢", 1255 | "马上收拾东西过年了", 1256 | "哇来咯", 1257 | "22222", 1258 | "111111", 1259 | "永远相信美好的事情即将发生", 1260 | "抽奖绝缘体", 1261 | "🚩🚩🚩", 1262 | "抽奖的不要[右哼哼]", 1263 | "没有参与奖么,给点矿石吧", 1264 | "直接给我发奖就完了 不用走这样的形式", 1265 | "有没有都能中奖的活动", 1266 | "算了,抽奖的活动就不参加了", 1267 | "中奖绝缘体,随机抽等于没有[思考]", 1268 | "停车坐爱枫林晚,霜叶红于二月花。", 1269 | "没办法,你是基数,分母", 1270 | "中奖率高和你中不中奖有毛关系", 1271 | "是啊,不想写,咋办", 1272 | "这手艺快赶上我了", 1273 | "莫得事,下次给我吃", 1274 | "谢谢,我吃[吃瓜群众]", 1275 | "喂我吃。", 1276 | "我没抽到[泪奔]", 1277 | "长这样的灯,太销魂了。[惊喜]", 1278 | "送我[看]", 1279 | "你从哪里来的,你也是托吗?", 1280 | "可可爱爱", 1281 | "我想参与一下", 1282 | "同问,关注的专栏 怎么看不到[捂脸]", 1283 | "我也要[流泪]", 1284 | "试试徐州的米线,一定会惊艳到你", 1285 | "pdd牛逼", 1286 | "地道", 1287 | "哇", 1288 | "天气真好", 1289 | "凌乱~", 1290 | "考研更卷 过来人跟你说一下", 1291 | "卷死了[流泪]", 1292 | "都卷吧?有不卷的吗?", 1293 | "这行卷吧至少工资还行[看]其他行业那就不清楚了", 1294 | "加油,你可以的!", 1295 | "焦虑吧,焦虑吧,我就可以卖课啦", 1296 | "都卷 就算躺平也卷[可怜]", 1297 | "都很卷哦", 1298 | "哪个行业都卷~", 1299 | "科班出身大可不必蒙着头", 1300 | "高风险高利润,计算机虽然卷 但是付出得到的回报还是要高出大多数行业的,你现在的辛苦都会在你拿到offer看到薪资时化为喜悦", 1301 | "考吧,还能在象牙塔里多躲几年", 1302 | "大一也这么觉得[凋谢][凋谢]", 1303 | "感谢分享", 1304 | "街上人挺多的", 1305 | "我承认我刚才说话大声了点", 1306 | "[呲牙]牛哇", 1307 | "辛苦啦[玫瑰]", 1308 | "好好好第74个,看在我打了53天的份上能不能嗨幕我一个双肩包🫡", 1309 | "8000多人,你小子太不容易了,辛苦!", 1310 | "辛苦了你小子", 1311 | "这玩意怎么找啊?我随身没有带电脑啊!他会自己发系统消息给我吗?", 1312 | "你小子 \n亏我天天高质量的打,有一两天没活硬写", 1313 | "还是要仔细打磨好活动规则再开始哦", 1314 | "怎么找啊[流泪][流泪][流泪][流泪]", 1315 | "优弧啊,我只能说,你对一个魂的力量一无所知。下次搞这种活动,千万别这么搞。", 1316 | "怎么找自己啊", 1317 | "你好, 优弧管理员我已经成功打卡21天,但是中奖名单统计少算了10天,请问在哪里反馈问题?", 1318 | "辛苦。", 1319 | "Nice 给你点赞", 1320 | "可以可以,辛苦啦[赞]", 1321 | "我也想知道,目前在广州,想去杭州", 1322 | "java都卷麻了", 1323 | "沾沾喜气", 1324 | "羡慕[泣不成声]", 1325 | "小黑子蒸虾头😦", 1326 | "沾沾仙气[呲牙]", 1327 | "v我100看看实力", 1328 | "建议打到我这里[看]", 1329 | "1700?", 1330 | "一样,大半夜还加班呢", 1331 | "我也一样", 1332 | "?", 1333 | "我更惨 我周末两天都要加班😤", 1334 | "偷偷跑吧", 1335 | "嗯", 1336 | "emo", 1337 | "今夜风太冷了", 1338 | "王若琳版本的吗🤔", 1339 | "兄弟咋了?", 1340 | "下雪了", 1341 | "是路灯吗", 1342 | "雪?", 1343 | "哪儿呀,才这么点儿雪[看]", 1344 | "给自己家做事怎么是免费劳动力,\n别说这糊涂话,省的他人听了,平添些笑话去了", 1345 | "洗自己家的东西还说什么免费劳动力?", 1346 | "脑子有病", 1347 | "免费劳动力?那家里人辛苦赚钱的时候你在哪里?怎么能扯上免费劳动力这种词?在家就个把月的时间帮家里做点事情都不行?", 1348 | "[赞][赞]", 1349 | "确实看着不错", 1350 | "还有一天", 1351 | "还有两天", 1352 | "再上三天", 1353 | "再上两天", 1354 | "自己吃的话,包成这样已经很厉害了。", 1355 | "一天没吃饭看这个挺难受的哈哈哈哈", 1356 | "🤓", 1357 | "两天", 1358 | "nice", 1359 | "好有味道", 1360 | "“眼泪从嘴角流出”[捂脸]你是真饿了啊", 1361 | "不错哦", 1362 | "孝顺的孩子", 1363 | "可以啊", 1364 | "是不是感觉自己长大了,可以照顾爸妈了", 1365 | "看着就香啊", 1366 | "[白眼的狗][白眼的狗]还在上班", 1367 | "啥游戏?", 1368 | "不打麻将的,讨厌麻将的点赞我", 1369 | "这就是你不种番茄原因?", 1370 | "几块的", 1371 | "连热闹都没有", 1372 | "支持", 1373 | "还不如一直冷清", 1374 | "冷", 1375 | "孤独后的陪伴尤为温暖", 1376 | "行", 1377 | "喜欢你", 1378 | "你多大?", 1379 | "这一喊,鱼尾纹都多了几条", 1380 | "📍保持清醒自律,知进知退爱自己", 1381 | "撒欢的狗子", 1382 | "既然来到这世界,就不要辜负这一生", 1383 | "假期好快", 1384 | "是回到上班的城市", 1385 | ",", 1386 | "路的尽头,仍然是路,只要你愿意走", 1387 | "那能让你起飞了么", 1388 | "那能让你起飞了吗", 1389 | "还有点少", 1390 | "今日遗憾的,来日一定会实现", 1391 | "不学了 学糊涂了 jym看成jvm", 1392 | "不好吃吧,我先帮你看看熟没熟", 1393 | "我看烤的不是很熟,寄过来我帮你尝尝", 1394 | "时光将岁月阻隔,能留下的都是最爱", 1395 | "coder我觉得这个词是个贬义词,叫做developer会更好", 1396 | "路遇的风景其实特美好", 1397 | "可以呀,我们开工12块", 1398 | "没跑到公司,没了,分一张", 1399 | "分一张", 1400 | "对我来说这是个非常糟糕的消息", 1401 | "明年用[机智]", 1402 | "一样", 1403 | "休息下", 1404 | "可以了 小伙子 有空来东北喝两杯 我请你 我知道你抠[思考]", 1405 | "可以了,兄弟,要求别太高", 1406 | "那也很好 加油", 1407 | "那也不错", 1408 | "同广州 加油", 1409 | "同在广州[坏笑]", 1410 | "有没有可能裁员主体只是互联网群体,其他行业就业一片大好?", 1411 | "注意身体", 1412 | "谁不是呢", 1413 | "这数据看看就好 是首相里面 汉弗莱对此有明确解释 电台泄密那集", 1414 | "……你这样卷,破坏生态啊。不要不要", 1415 | "你去光谷金融港的司机宝,里面全是卷b", 1416 | "这么卷,我要是面试官,肯定不让你通过。\n这货来了肯定会打破以前的舒服。\n没有看见的特别说明卷的含义", 1417 | "各位同胞不要误会[奸笑]此处卷仅代表抗压能力[泣不成声]", 1418 | "内推你当工贼的?", 1419 | "...招你进去卷同事吗", 1420 | "辛苦", 1421 | "编内吗", 1422 | "还能兼职搞外包,多好啊", 1423 | "合同工呗", 1424 | "怎么进", 1425 | "现在脱坑也还来得及", 1426 | "不能吧?只有通过蒸馏吧?", 1427 | "粮食危机", 1428 | "战争疑雾[奸笑]", 1429 | "离开作女", 1430 | "爬楼伤膝盖,且行且珍惜", 1431 | "注意膝盖额", 1432 | "你从前面右转的第二排架子上就有了", 1433 | "不懂就问,啥是拌倒铁盒?", 1434 | "今日废话:汐文小姐,我会想你,在我这漫漫长路上的每一步!", 1435 | "还没上手啊", 1436 | "今日废话:卑屈游戏谁是先该离场的呢?", 1437 | "今日废话:他只有两只手,所以只能用心抓住一个人。", 1438 | "今日废话:我的辫子长在头上,诸君的辫子长在心里。", 1439 | "今日废话:剑指之地,破穹其顶。", 1440 | "说得好", 1441 | "又一批失业人员", 1442 | "这一天过得可真精彩,科目三很简单的", 1443 | "该换电脑了", 1444 | "一百卖我,交个朋友", 1445 | "过不久就是方便面神器了[泣不成声]", 1446 | "9.9收了~😅", 1447 | "我刚起来", 1448 | "建议死在旱厕上", 1449 | "怕啥", 1450 | "勇敢一点", 1451 | "多大点事,多喜欢几个[白眼的狗]", 1452 | "坏消息: 名花有主\n好消息: 只有一个对手", 1453 | "改天有时候,线下再去跟他吹吹水了。[碰拳][无辜呆]", 1454 | "今日废话:每天,似乎都一样。", 1455 | "给他代码里加bug", 1456 | "今日废话:单程孤舟,出云入霞,如歌如吟。", 1457 | "今日废话:你背朝太阳,就只能看到自己的影子。", 1458 | "今日废话:我们登上并非我们所选择的舞台,演出并非我们所选择的剧本。", 1459 | "今日废话:人是生而自由的,但却无往不在枷锁之中。", 1460 | "坑人少。", 1461 | "玩的爽,", 1462 | "比国内实惠,", 1463 | "今日废话:野蛮人之间人吃人,文明人之间人骗人。", 1464 | "认识不?", 1465 | "奥利给", 1466 | "好主意" 1467 | ], 1468 | "article": [ 1469 | "感谢,学习了,受益颇多", 1470 | "学费了", 1471 | "学到了[不失礼貌的微笑]", 1472 | "[赞]", 1473 | "[奋斗][奋斗][奋斗]", 1474 | "关于开销比较大的CSS属性,我比较有感觉的是 backdrop-filter\\box-shadow\\text-shadow,这些,如果是集显的话,大范围用上面三个样式会有卡顿。你列举的那些反而觉得影响不大。\nhttps://juejin.cn/post/7134271887604973605", 1475 | "楼主,你这个中国地图边框的蓝色高亮是怎么弄的,我下你的代码为啥没显示这个高亮呢", 1476 | "我虽然看不懂,但我大受震撼[西瓜]", 1477 | "总结的不错,厉害了", 1478 | "非常好,空了仔细看🧐", 1479 | "支持原创,文章内容清新,知识点很详细", 1480 | "还在用lerna吗?来一起学习pnpm", 1481 | "复杂的系统,PRD不可缺少的一部分东西", 1482 | "产品经理很棒", 1483 | "讲的很不错[赞]", 1484 | "大佬,666", 1485 | "如果是别的部门不肯签名验收呢", 1486 | "如果大量是不可控因素,复盘意义也不大吧?下一次基板上这些不可控因素还会发生", 1487 | "已读", 1488 | "学到了", 1489 | "已阅", 1490 | "一个小时是3600秒[捂脸]", 1491 | "确实厉害", 1492 | "这个可以配置antd组件库的主题色吗", 1493 | "这个和aj版的区别有点大", 1494 | "问一下 vue版本 ,按需引入怎么用,没找到API[害羞]", 1495 | "(紫罗兰,蜜糖)=== (骚紫,洋红)", 1496 | "再问一嘴,为什么我的chrome首选语言已经设置为中文了,但是官网还是英文的呢,也没找到切换的地方", 1497 | "又一款优秀的组件库,支持[赞]", 1498 | "才知道有这么一款ui", 1499 | "不错,非常有意思", 1500 | "优秀", 1501 | "我曾经有你一样的遭遇,加油,靓仔[强]", 1502 | "我想知道,一天正常是开发几个页面,几个接口算是正常的", 1503 | "还是基础重要,框架只是模式,jq也是比较重基础的,我现在感觉自己是半个程序员,没自信", 1504 | "加油兄弟,生活不会总是苦的。", 1505 | "技术只是手段,挣钱才是目的[呲牙]", 1506 | "你这个开发效率已经比我这种咸鱼佬强了。。公司的问题,没必要妄自菲薄。祝早日找到好工作", 1507 | "家父是张二河?", 1508 | "直接给他重构不好嘛,比jq效率高多了", 1509 | "JQ很难嘛?不难吧,,,我就是JQ起步,后面再学其他的;技术不在于拥有多少,在于理解度,一个框架吃透了,基础还可以,其他框架看了官网就会了,,,,", 1510 | "支持博主,看似是被他们开,其实是自己做的选择(因技术陈旧而摆烂),加油!!", 1511 | "你是一粒种子 他们想把你埋了 !", 1512 | "一般面试过于简单,或者公司没人急招的这种,有可能是坑", 1513 | "祝越来越好", 1514 | "哪家公司,希望楼主报一下,防止踩坑,哈哈😄", 1515 | "[思考]个人认为没必要抵触jq,技术应该是翻翻文档拿来就可以用的,不管vue/react或者别的。", 1516 | "经济形势不景气啊,一直说寒冬,以前没当回事,现在结果真的寒冬了", 1517 | "靓仔!", 1518 | "jq的公司我看到直接不考虑了,不想把时间浪费在学习过时的技术上,我宁可用原生js写都不想学jq", 1519 | "为啥不会jq,不会jq那就是也不会原生js操作dom吗[闭嘴]", 1520 | "我也好慌,楼主是应届生吗?", 1521 | "[思考]赞", 1522 | "yarn或者npm i 装包的时候 有丢包或者其他问题出现 通常会暴力的把node_modules全删重新装一遍,用pnpm是不是就多了一步,删node_modules之后执行pnpm store prune 再重装[看]", 1523 | "最大的优点就是没有幽灵依赖", 1524 | "我觉得去中心化变成了中心化完全没必要,硬盘是最不值钱的。", 1525 | "pnpm 有个缺点就是 patch-package 不好使了:用 npm 或者 yarn 时,如果一个依赖爆了漏洞而维护者迟迟不修,我们可以用 patch-package 自己改本地代码,不用等依赖发版。但 pnpm 因为都是指向全局的链接,就改不了了。好像看到社区有 tricky 的解决方案,但在原理上是有功能缺陷的。\n不过用到 patch package 的场景很少,工作两年也只遇到一次,一般还是可以放心使用 pnpm 的。", 1526 | "cnpm pnpm npm yarn 真恶心 区分不清。用就完了。哪里那么多事", 1527 | "npm 自己就有一个 npm link 命令,不过只建议在包开发阶段使用。", 1528 | "最近使了下pnpm,它的好处,还在于避免了幽灵依赖,这个真的很有用;a 依赖的 b,b里依赖了c,在npm里,a 直接依赖c不报错,但是在pnpm里就会报错;这解决了b某天不再依赖c,a就跑不起来的问题", 1529 | "[灵光一现]", 1530 | "都是垃圾", 1531 | "我记得Windows不支持链接?", 1532 | "有一个疑问,如果开发了多个项目,同一个包每次都有更新,pnpm是会保存每一个不同版本的依赖吗?", 1533 | "\"因為 npm install 會根據該專案的 package.json 中的 Dependencies 項目安裝而這些項目怎麼來的?\n等等會在 安裝package 的章節提到。\n至於安裝的模組會存在該專案資料夾的node_module\n你沒看錯!以往我們都是將模組安裝在local端的global,\n但是在 Node 的世界希望每個專案都獨立,\n雖然說這樣會造成記憶體的浪費,\n但是卻能避免掉很多不必要的問題。\" ---- 摘自【我可以你也可以的Node.js】第九篇 - NPM、NVM 自己的版本自己控制\n其实服务端一直采用的是 pnpm 这种方式,现在前端由于工程越来越复杂,也向服务端对齐了。\n要不然电脑系统磁盘几十G都被npm包占着,像256G的Mac很容易磁盘不足~~~", 1534 | "咋解决幽灵依赖问题的呀,包里面依赖的包不是还是被下载下来了吗", 1535 | "使用creact-react-app创建的项目,删除package-lock.json之后使用pnpm会报错\n\n```\n ERR_PNPM_PEER_DEP_ISSUES  Unmet peer dependencies\n\n.\n└─┬ react-scripts\n ├── ✕ missing peer typescript@\"^3.2.1 || ^4\"\n```\n\n这种只能手动再依次安装缺失的依赖吗😂", 1536 | "简明扼要[灵光一现]", 1537 | "很好,我npm抄了[看]", 1538 | "Yarnzero-installs(https://yarnpkg.com/features/zero-installs),虽然浪费磁盘空间,但多人协作的时候还是有一定优势的,git版本控制把依赖也添加进去,项目拉下来就可以直接开跑,不涉及安装依赖时的各种问题。", 1539 | "m", 1540 | "简单来说,pnpm不会重复下载包,npm和yarn会把包重新下载一遍", 1541 | "vite2不用koa搭服务了", 1542 | "有没有想过是公司的问题,他们招你进来就是让你填坑的,现在坑填完了自然不要你,跟技术无关", 1543 | "难兄难弟啊,我的遭遇跟你也差不了哪儿去,我是过了三个月试用期,然后上了半个月告诉我试用期没过,也给我留了将近10天时间找工作[泪奔]", 1544 | "jq不就是简单版的js吗。。。如果jq觉得很难入手的话,那我理解js功底也不太行。只会vue是没用的兄弟。。。", 1545 | "试用期被辞退也能要求补偿,除非公司能明确地拿出证据证明在你的业务范围内你不能胜任该工作,并且期间有经过培训", 1546 | "[吃瓜群众]", 1547 | "家父张二河[黑脸]", 1548 | "jq其实是一个很好的库,简单易懂,操作方便,只是和vue react angular思想不一样,存量市场还是很大的,衡量一份工作不能只看用的是vue2 或者vue3 或者react等花里胡哨的框架,而是看岗位能否提供继续深入学习js这门语言的氛围和机会", 1549 | "jq也不错,框架也挺好", 1550 | "[流汗]", 1551 | "加油", 1552 | "加油[呲牙]", 1553 | "jq项目还需要这么长时间维护的公司,早该换了", 1554 | "说实话,如果js基础好,jquery很简单的", 1555 | "有没有可能不是你的问题,有些垃圾公司故意这样的,卡试用期裁人,这样不用赔偿", 1556 | "哈哈哈,你被框架迷惑了,这就只是个工具,vue、jquery都是,前端工作还得看js的能力。\n不过这种公司就算转正呆着也没啥意思,犯不着为这种烂地方自暴自弃,继续找工作呗,磨练两年在努力提升一下,加油~", 1557 | "来深圳,饿不死,放心", 1558 | "这些年,挺难的~", 1559 | "啊,这", 1560 | "jq什么的,只不过是一种工具,何必焦虑", 1561 | "傻孩子 怕不是被pua了吧[奸笑]", 1562 | "为什么要浪费时间写这种东西", 1563 | "疯狂的星期六到了。", 1564 | "膜拜大佬", 1565 | "支持[灵光一现]加油干,需要的就是你们这种拥有创新思想并且付出行动的人才,而不是cv工程师[赞][赞][赞]", 1566 | "这个创新感觉不错,大佬牛逼,不过要让人用还是有点难", 1567 | "可以到推特和国外博客网站宣传一下,\n国内这环境没啥希望,\nvue火成这样也没啥生态。", 1568 | "赞一个", 1569 | "留下两个字,很帅", 1570 | "很帅~start 我给了,但是useMemoizedFn", 1571 | "说实话 没打动", 1572 | "牛哇,同写react,感觉这玩意心智负担是真重", 1573 | "看完之后发现了一个点,优化的思路是从泛化Hashmap转到特化的Hashmap,因为要接收泛型也需要额外花一些时间,如果需求固定的话,那么确定其中那些输入输出的类型,针对这些类型做一些优化而不是使用泛化的数据结构就可以得到一些比较好的效果,不知道我理解的合不合适", 1574 | "不是12k,是12w", 1575 | "学废了", 1576 | "牛", 1577 | "很棒,受教了!", 1578 | "大佬可以看看最新的代码,关于hashIndex函数,已经换了。", 1579 | "有才", 1580 | "个人对减少内存这个地方有点疑问:开放寻址法虽然没有额外链表指针存储,但一般的加载因子会小,netty这个是0.5,而hashmap是0.75,那就会导致比链表法更容易扩容,这样内存占用也不一定比链表法小吧?\n同时也没弄明白什么时候用开放寻址什么时候用链表?搜了下像是c#的dictionary用的链表,但是hashtable又用的开放寻址;java则除了threadlocal貌似其它的都用的链表;python的dictionary用的开放寻址;redis用的链表,感觉都好随意。。。", 1581 | "佩服楼主这种追根究底的精神,带着自己的思考去看源码", 1582 | "好久没见这种好文章了![赞][赞][赞]", 1583 | "扩容那里不用位运算是防止int溢出", 1584 | "这些高深的细节的东西 我是真不会", 1585 | "哇,大佬", 1586 | "高质量文章,学习了", 1587 | "精品,请问可以转载吗", 1588 | "能不在heap malloc内存就不要alloc,包装类就是存放到heap上面的。放到栈上面快用快销", 1589 | "请教下,画图工具是什么?", 1590 | "精品", 1591 | "好文,收藏", 1592 | "太强了,好的文章就像说故事一样,让我们都能代入进去,我去翻了翻issue,怪自己读书少,他们遇到的问题在国内很难遇见,只能站在巨人的肩膀上看细微的细节", 1593 | "参数“config”隐式具有“any”类型,请问这个怎么处理", 1594 | "clearFn是干嘛的呀", 1595 | "你好,export const api = {\n\t...userApi,\n\t...shoporderApi\n} 这里如何解决函数同名问题呢?", 1596 | "switch (errStatus) {\ncase 400:\nerrMessage = '错误的请求'\nbreak\ncase 401:\nerrMessage = '未授权,请重新登录'\nbreak\ncase 403:\nerrMessage = '拒绝访问'\nbreak\n}\n\n写成\nconst errMsgMap = {\n 400: '错误的请求',\n400: '错误的请求',\n}", 1597 | "JS还可以,TS看着是真的难受啊,都看不明白这样限制[流泪]", 1598 | "看到any就没必要再往下看了", 1599 | "js版本的好像有点问题啊,如果接口返回失败拦截后Promise.reject(err.response)依旧会进入.then方法而不是直接进入.catch方法", 1600 | "楼主,有没有js版本的", 1601 | "新人菜鸡问个问题:假如是第一个认证错误的情况,那他的错误码也符合第二类错误,为什么不会出现两次弹窗的情况呢,", 1602 | "[灵光一现]一个月过去了,鸽子已经进炖锅了,大家不用等了,自己改改ts也可以的", 1603 | "这样有个问题就是每个人的方法名不能重复,不然就会存在请求被覆盖的情况", 1604 | "get post put delete 为啥不合起来,这里面的区别应该不是很大,分开写完全重复了", 1605 | "良心,求git地址", 1606 | "大佬,发个js版本的看看啊,ts那段看的有点难受[可怜]", 1607 | "那么如何再结合上 loading 状态来优雅地驱动 UI 变更呢?", 1608 | "我真的很反感 ts 啊,只有我一个人不喜欢 ts 吗?我感觉就是多此一举", 1609 | "非常不错,思路清晰,同求js版本", 1610 | "期待一个JS版本的 求@git地址", 1611 | "蹲一个js版本[呲牙]", 1612 | "大佬,js版的出来了吗?", 1613 | "any application that can be written in JavaScript, will eventually be written in JavaScript.", 1614 | "主任牛呀[666]", 1615 | "猴赛雷", 1616 | "顶一个![赞][赞]66666666666", 1617 | "支持支持", 1618 | "有点老,还有文本编辑器都不太好", 1619 | "拿来吧你", 1620 | "可以用这个软件来管理这里库的API文档\nhttps://juejin.cn/post/7134271887604973605", 1621 | "哥们,2202年了,还在推荐vue-resource???", 1622 | "写的不错,建议来个react体系的", 1623 | "666", 1624 | "看到vuex感觉有点疑惑,现在官方不是在推pinia吗", 1625 | "[困]", 1626 | "互", 1627 | "“值得推荐”,是但不全是。", 1628 | "阔以", 1629 | "额", 1630 | "Pinia可以的", 1631 | "可以的", 1632 | "[给力]", 1633 | "离谱", 1634 | "眼花缭乱, 层出不穷,吓退我这后端人士...", 1635 | "vue-form-making?好用的全都收费,免费的和比别的差远了。", 1636 | "太棒了,我去试试", 1637 | "vscode-drawio 这个窗口的颜色如何修改", 1638 | "这个可以体验看看\nhttps://juejin.cn/post/7134271887604973605", 1639 | "中国蚁剑", 1640 | "第7个好棒啊,我之前就是不知道怎么让代码的截图更美丽~", 1641 | "已使用", 1642 | "强强", 1643 | "[送心]", 1644 | "学习学习", 1645 | "第7条,那个屏幕显示按了什么键是怎么弄的?", 1646 | "好东西,推荐的几个插件都很有意思,算是可以提高生产力,而且有几个不是总被推荐的那种[吃瓜群众]", 1647 | "6666", 1648 | "和蚁剑有什么关系吗?", 1649 | "借个楼,蟹蟹,微信小程序:乐玩程序\n有趣的一款小游戏", 1650 | "这主题样式看着真舒服", 1651 | "react程序员路过[呲牙]", 1652 | "硬是看了一半了,没耐心了,来看看评论区", 1653 | "6", 1654 | "收藏等于学习,学完了", 1655 | "然后呢 框架开源了吗 地址", 1656 | "好文,直面业界痛点", 1657 | "赞", 1658 | "我虽然看不懂,但我大受震撼[色]", 1659 | "用 lodash-es 就可以按需引入了 因为是 es module 打包时可以被 tree-shaking", 1660 | "最近有个需求就不得不用lodash的toArray解决emoji长度识别问题", 1661 | "cloneDeep和debounce常用", 1662 | "还是好用的,cloneDeep、isEqual我常用", 1663 | "写的不错,得抓紧学起来了", 1664 | "第一次token失效 请求没有加入执行队列数组", 1665 | "你这样完全违背了TOKEN存在的意义", 1666 | "后端保活token 请求里的token超时就是应该请求失败并且要求用户重新登录的吧 为啥要前端无痛刷新呀?", 1667 | "", 1668 | "那后台为什么要做过期处理呢[捂脸]", 1669 | "还不错哈", 1670 | "1", 1671 | "闲的", 1672 | "想不明白,vue使用要把token放到store中 为了响应式 ?好像这个也不是必须的", 1673 | "blob类的请求咋刷新,直接返回了", 1674 | "+2", 1675 | "学到了!", 1676 | "说得好", 1677 | "看到这么多人说是后端的事我就放心了", 1678 | "让我来完成以下任务长点经验[思考]", 1679 | "先不说作者代码问题,我看评论一直在讨论双token的必要性问题,有人还说采用单token就行用户访问接口就自动延迟 token 的时间,我在这说一下我的看法,有错误的地方还请多多请教。\n我觉得双token刷新还是很有必要的,如果只有一个token当token泄漏后攻击者只需要不断的去访问接口这个token就会一直有效,攻击者会一直有这个用户账户的接口访问权限。\n采用双token的话access_token 使用频繁,泄漏几率大。\nrefresh_token 使用不频繁,泄漏几率小。\n有人会说refresh_token也会有泄漏的机率啊。\n如果两个token都泄漏了攻击者先拿access_token去调用接口,当access_token在很短的时间过期后这个access_token不能访问了他就要去拿refresh_token去刷新这时候返回的是access_token2和refresh_token2之前旧的access_token和refresh_token就失效了,用户这边保存的还是旧的access_token和refresh_token,当用户这边access_token失效了就去拿refresh_token去刷新时由于攻击者已经刷新了token导致这个refresh_token失效就会提示用户登录,当出现这种情况服务器就会发现异常,这时可以增加其他验证方式比如短信验证码。当多次出现这种情况就要提示用户修改密码和当前网络环境问题有可能被中间人攻击。", 1680 | "这种场景不应该前端来做,我以前也做过,主要还是后端框架token过期时间太短了又不愿意去改框架底层", 1681 | "我在进入失败的回调里试了一下 这个也可以用。", 1682 | "和 useAxios 和 useFetch 有什么区别吗", 1683 | "[绝望的凝视]", 1684 | "佬!", 1685 | "收藏🟰会了", 1686 | "接口是 http2.0 也有一部分原因吧", 1687 | "学习了", 1688 | "vue的也很顺滑啊[不失礼貌的微笑]", 1689 | "大佬们,可以看下我的快吗 https://hzdjs.cn", 1690 | "可以看下我的网站,也很快 https://hzdjs.cn[听歌]", 1691 | "不错", 1692 | "大佬,有个问题想问下,如果这些预加载的link标签一开始就在html文档中返回了,那浏览器解析html文档的时候不就会自动加载这些资源吗,何来预加载一说?", 1693 | "收藏", 1694 | "试了下,是真的很快[惊讶]", 1695 | "JAMStack 最近有个项目就是在搞这个[坏笑]", 1696 | "HOOK 规则那里 我咋感觉是描点跳转的", 1697 | "mark", 1698 | "采用md5技术和本地缓存技术,也可以加快加载\n我的更快 https://juejin.cn/post/7134271887604973605", 1699 | "http://47.98.216.176:10086/\n我快吗, 文章还没同步", 1700 | "那组件是不是也可以提前加载好,然后客户端在调用的时候直接调用渲染完成的组件,就比如后台管理系统的tab栏切换页面时直接加载渲染好的组件,如果可以的话服务器的压力会不会很大?", 1701 | "大佬们,我的这个快吗?\nhttps://xzgz.top", 1702 | "直接:arr.every(len => len>0) 呢?", 1703 | "还有好多方法 建议在补充补充", 1704 | "产品说,对应错误要用对应的提示语。", 1705 | "可以用vee-validate", 1706 | "整挺好,如果是即有或又有并呢?", 1707 | "其实你这样也不是最优解决方案,因为无法准确提示错误信息,也没有是否必填。", 1708 | "确实,大家都会条件反射的把条件判断放在if上,我原来看过一个帖子,里面还有一个是用switch case,但最后才知道,把条件放在数组里,用some和includes是真的香", 1709 | "不是应该arr1.includes(false)吗", 1710 | "666,小技巧。", 1711 | "这个德芙有点短", 1712 | "判断所应该用some吧?", 1713 | "判断的变量的值有可能是数组,如果数组为空的话Checkbox 多选框和Select 选择器的多选不填也不会报错吧!", 1714 | "现在想想,angular的formControl还是有一点点点点点用处的,一个check搞定[不看]", 1715 | "设计模式可以看起来了~", 1716 | "一般用自带的表单验证吧", 1717 | "意义不大0 0", 1718 | "yup了解一下", 1719 | "arr1.includes(true)是啥意思,只要满足其中一个条件就行了?\n按照你的意思不是应该 if (arr.every(condition => condition)) 吗,也不用定义 arr1 了。而且用户输入 0 的话也会被你判断为没有输入的。", 1720 | "策略模式了解一下", 1721 | "进收藏吃灰吧[比心]", 1722 | "收藏了[大笑]", 1723 | "来了,", 1724 | "【文章自荐】免费部署一个“土味情话”生成网站 https://juejin.cn/post/7064747430150930439", 1725 | "哈哈哈 太赞了 直接给你的全部文章点赞了", 1726 | "下载来试了一下 整体功能都是不支持离线, 想了解一下自动化测试的方案 点开macaca-macos仓库 啥也没写 有点难受[流泪]", 1727 | "然而mac下面的桌面端卡顿、闪退问题严重。已经放弃了,不如直接PWA好用", 1728 | "请问文中提到的和业务解耦的通用包, 是开源的嘛?", 1729 | "下载看看", 1730 | "模拟器不支持M1芯片,告辞!", 1731 | "我前面mac用的charles然后抓自己手机的包,开了代理游戏失败,最后手机上还专门装了抓包app[捂脸],你这个抓包工具,感觉挺好使啊", 1732 | "不行了,抓包成功了以后,通关次数还是0~重新进入以后又一次开始游戏[捂脸]", 1733 | "接口变了", 1734 | "哪个android模拟器能在m1上使用", 1735 | "接口又变了 404了", 1736 | "返回了{\"err_code\":0,\"err_msg\":\"\",\"data\":0}", 1737 | "看了反编译源码, 接口参数需要MatchPlayInfo, 源码不完整 加密过程推不出来[吐]", 1738 | "不行了啊接口", 1739 | "吼,还挺得行嘛。", 1740 | "zzz", 1741 | "财富自由,三线城市资产600万,二线城市资产1200万,一线城市资产1800万", 1742 | "思路还是ok的", 1743 | "如果上天再给我一次机会,我还是会点进来给你一个赞", 1744 | "66666", 1745 | "推荐看一下《纳瓦尔宝典》", 1746 | "实现财富自由的唯一办法是创业(或者参与创业)", 1747 | "退休后的收入替代率能达到60-70%,控制欲望想提前退休还是可以实现的", 1748 | "竟然不是卖课的。我很失望[微笑]", 1749 | "经典中的经典,为了赚钱而教人如何赚钱", 1750 | "蛋糕小了,吃不到", 1751 | "现在是白天", 1752 | "可以把闲置的豪宅和豪车租出去, 实在不行可以开着剩余的豪车出去跑滴滴专车", 1753 | "[看][看]", 1754 | "《财富自由的程序员如何实现财富自由》", 1755 | "👊", 1756 | "竟然还能这样,妙啊![西瓜]", 1757 | "我的这里代码没效果是咋回事呀", 1758 | "[赞][赞]", 1759 | "这是增加了current当前类改进后的:https://code.juejin.cn/pen/7145753765805555724", 1760 | "来一个和fiber的对比", 1761 | "输出的日志有追踪id吗?有对应的代码生成器吗?", 1762 | "go-zero不比你这个香吗", 1763 | "确定这个不是gin", 1764 | "和iris比较有什么优势?", 1765 | "go的框架太多了,选择困难症", 1766 | "用针之服,必有法则,上视天光,下司八正,以辟奇邪,而观百姓,审于虚实,无犯其邪。是得天之灵,遇岁之虚实,救而不胜,反受其殃,故曰必知天忌,乃言针意。法于往古,验于来今,观于窈冥,通于无穷。『《黄帝内经·灵枢》』", 1767 | "两年前我就用过🤨", 1768 | "好的不学 学阿里那一套把别人的拿来改改说成自己的🌚🌚", 1769 | "这个跟kratos的区别是什么", 1770 | "这和gin 有啥区别", 1771 | "奈斯奈斯", 1772 | "很不错", 1773 | "先点赞,后阅读", 1774 | "感谢分享", 1775 | "你组长真好讨好!", 1776 | "好家伙,我可以转载吗 注明作者和出处", 1777 | "水经验", 1778 | "学到了。苏珊[尬笑]", 1779 | "很明显,你的戏真多[尴尬]", 1780 | "我就是你组长的表哥,你组长欠我2万块没还,麻烦你跟他说声", 1781 | "计算数组平均值可以考虑下空数组", 1782 | "检测对象是否为空我有更简洁的写法:\nconst isEmpty = obj => JSON.stringify(obj) === '{}'", 1783 | "Github 建个项目吧,叫,写两行算我输", 1784 | "获取url参数", 1785 | "不错[赞]", 1786 | "强", 1787 | "组长:我没说!", 1788 | "但我收藏夹吃灰吧🤔", 1789 | "原来技术总监还会跟我们抢活干[哭笑]", 1790 | "唯有南风旧相识,偷开门户又翻书。庄子《逍遥游》", 1791 | "高并发情况下, 第一考虑的是如何提高tps,限流是最后考虑的。", 1792 | "技术总监还是挺愿意分享技术的哈[灵光一现]", 1793 | "收藏了再说,下次有人问,拿出来吹", 1794 | "新的技术总监安排手下吹自己", 1795 | "消息都打到mq里[呲牙]", 1796 | "技术总监好闲哦", 1797 | "到位", 1798 | "能够懂得各种限流绝对是牛人", 1799 | "技术总监:对对对,我闲的很", 1800 | "面试常问的东西[流泪]", 1801 | "九折?", 1802 | "技术总监整天就干这种事吗", 1803 | "很全", 1804 | "好好好", 1805 | "看一些文档说, 不建议使用getCurrentInstance方法,真的是这样吗?", 1806 | "没有这样用过,不知道会不会遇到什么坑", 1807 | "我们也这么搞 有一次美工给的尺寸跟实际的显示器不一样, 我就用scale给改好了,感觉还可以, 但是有时候里面内容复杂而且有交互特效多的时候,有可能会有问题,一般问题不大", 1808 | "使用scale适配大屏, 有没有弊端", 1809 | "这里这个 screen-root 是不是弄错了 ,是指的 screen-wrapper 吗?", 1810 | "写的不错[呲牙]", 1811 | "var vvar 错别字[奸笑][奸笑][奸笑]", 1812 | "好", 1813 | "好!", 1814 | "支持宽屏模式下,晚上装一个到车机上看看能不能用", 1815 | "膜大佬,不过可以把RN换成0.70版本,性能提升很大\n也可以直接展示插件安装列表,点击即可安装,从url导入比较原始", 1816 | "可以,很像原生", 1817 | "厉害了", 1818 | "大佬 还招小弟吗", 1819 | "有vue版本的文章吗?", 1820 | "比如我", 1821 | "[呲牙]", 1822 | "程序员的归宿到底是什么?", 1823 | "[赞][赞][赞]", 1824 | "确实需要运气和实力,最重要的是要主动寻求突破\n不然一直做着各种业务,混来混去随波逐流提升有限\n有那个机会,有那个平台,愿意花时间精力去研究那些东西,然后积累突破\n个人的觉悟,和主动寻求机会,可以把握住很多机会,不然全都会错过", 1825 | "好好学习深入", 1826 | "[看]去哪都不要做最强的那个,或者说在你成为阶层最强前还没有晋级下一个阶层,本身问题就大发了", 1827 | "自我驱动能力非常重要,自律的人即使开始时候基础差,慢慢也能超越开始时候基础好的,就像龟兔赛跑", 1828 | "当今社会,有点现实,\n第一,要会站对,跟对人,不然很难。一个团队里面,技术强就那几个,提拔谁,主要还是看领导。\n第二,要会演,树立自己的人设,容易沟通,抗压能力强等等,和其它团队和谐配合,这样别人对你的评价才高.\n第三,背后潜移默化的抹黑对手。", 1829 | "看了开头几句,就马上点赞了", 1830 | "以人为镜,自省己身?", 1831 | "都是虚的,学会向上管理就行,做的好不如舔得好", 1832 | "时间拉长就看持续性了,一直学的到后面都不会太差。兔子偷懒也会被乌龟追上。", 1833 | "理论还行,实际并不是这样运转的", 1834 | "不错 有些观点蛮赞同的", 1835 | "纯纯自嗨", 1836 | "big(1.2).plus(120) 这个转换应该是 ,[0,0,1,2] + [1,2,0,0] 吧? 举例的文字里是 [0,1,2]", 1837 | "10分钟吃顿饭的时间[看]", 1838 | "该用的还是得狠狠用!", 1839 | "我看标题是以为不建议用ref,看完发现是说怎么用ref[呲牙]", 1840 | "评论一篇文章\n掘友分+2,已完成1/2", 1841 | "我之前用的reacthtmtablel下载表格,用refs获取dom节点,但是refs废弃了,用了新的createRef,获取不到antd的table节点,大佬你知道原因么,但是div可以获取到", 1842 | "失控的ref部分,React控制范围内和React控制范围外是怎么理解的。", 1843 | "高阶组件那个是不是因为是函数组件才传递失败的啊?", 1844 | "跟着卡颂学React,永远没有错[坏笑]", 1845 | "失控的Ref那部分 写反了", 1846 | "掘金成情感论坛了", 1847 | "老乡[得意] 痛 太痛了", 1848 | "别干程序员了 转行写小说吧 我媳妇喜欢看", 1849 | "麻麻的,我逛掘金是来看这个的吗[发怒]这下被顺砍带暴击了", 1850 | "姨母笑[看]", 1851 | "可我一直觉得这个房子是我奶奶心心念念了一辈子的事情。转念一想一辈人有一辈人的使命,最多就是自己再多奋斗几年就没多去计较。\n\n就凭这几句话,我必须给你一个大大赞!!", 1852 | "有缘千里来相会", 1853 | "帮她做家务、洗头???都洗头了,我该怎么往下想象", 1854 | "看得有点感动我也在苏州工作 老哥加油", 1855 | "考研上岸,没拿剑斩你吗?", 1856 | "期待续集[呲牙]", 1857 | "羡慕了", 1858 | "贵州老哥加油\n我也是遵义的", 1859 | "工作几年了?", 1860 | "啊,痛,太痛了。写代码看这小说似的文章,我不敢相信作者是程序员,是作家吧\n[捂脸][捂脸][捂脸]", 1861 | "太长了,建议直接发照片", 1862 | "后续呢,有情人终成眷属吗", 1863 | "在掘金竟然吃了一个瓜", 1864 | "后续呢??想看后续[呲牙]", 1865 | "\"临走时她塞了一个东西在我手里,打开一看昨天的发带,抬头她已走远她小声说了一句:我们有缘再见\"--偶像剧情节啊,简直绝了,祝福,祝福祝福", 1866 | "有无源码[呲牙]", 1867 | "很好", 1868 | "26号发的文章会被计入活动文章吗?", 1869 | "今天这个活动还没有统计出结果吗?", 1870 | "发文活动还没开奖吗?", 1871 | "弗兰克感觉\n谁来的快放假\n老师看到飞机\n老师看到飞机", 1872 | "111", 1873 | "抓🐔把握🐔会", 1874 | "小朋友才做选择,成年人我都要[呲牙]", 1875 | "吗了,等有空", 1876 | "参加不起", 1877 | "话说沸点活动,活动文章地址之前我都写成了自己的文章的地址,没有写成这篇帖子的地址,会有影响吗?", 1878 | "1111111111111", 1879 | "后端来先献丑了,求赞[玫瑰]https://juejin.cn/post/7143443769948373005", 1880 | "。", 1881 | "加油!!", 1882 | "[思考]", 1883 | "[微笑]😘😘", 1884 | "本来打算开写了。一想我是后端,,,,", 1885 | "望而生畏", 1886 | "[击掌][击掌][击掌]", 1887 | "学习。", 1888 | "优秀!简单明了,有图有真相。", 1889 | "一般是后端直接提供最终格式的数据,不用前端做大规模的转化", 1890 | "同样是腰间盘为何你如此突出。同样九年义务教育,为何你如此优秀?", 1891 | "[悠闲]", 1892 | "可以推动qiankun侧改么[微笑]", 1893 | "好文,mark", 1894 | "最重要的还是生态", 1895 | "学不会,知道就得了", 1896 | "很快 沉也沉的快", 1897 | "[奸笑]", 1898 | "yo yo yo,这不deno吗?几天没见这么拉了[看]", 1899 | "太卷了", 1900 | "被动吊打", 1901 | "没一个活灵活现的", 1902 | "我也写了一篇关于bun的文章,主要是探讨Bun可不可以取代Node哦[呲牙]", 1903 | "我做了套件bunrest,基本上你可以使用expressjs的api使用bun的服务器\nhttps://www.npmjs.com/package/bunrest", 1904 | "windows就这,你拿什么竞争?", 1905 | "[看]学不完了啊这", 1906 | "学起来", 1907 | "不是 生产都用不了 就开始吹了", 1908 | "“使用了 JavaScriptCore 引擎,它的执行速度往往要比 V8 等更传统引擎要快。”这个怎么说呢?我理解开启 JIT 的 V8 不是最快的吗?", 1909 | "还好我不会node,准备开始卷这个吧", 1910 | "FFI是啥", 1911 | "还是实验性的项目,都还没稳定下来。而且除了快,就是重复造轮子。", 1912 | "掘友分+2", 1913 | "你好,文章不错,请问可以授权转载嘛,会注明作者和出处", 1914 | "第二弹出来啦,xdm https://juejin.cn/post/7121887173062131742?share_token=f2a49626-093c-4bd5-9c66-a9d26fdaa3ff", 1915 | "厉害", 1916 | "表示支持", 1917 | "其实没啥用,限制太多了", 1918 | "学习下思路", 1919 | "想法是可以,但是限制越多,越没人用。 [呲牙]", 1920 | "有用", 1921 | "ref 定义数组这事靠谱吗?", 1922 | "可以看一下这篇的实现,感觉更好一些https://juejin.cn/post/7043649748749778975", 1923 | "厉害啊", 1924 | "columns配置化,感觉实际需求中限制有点大,稍微加个定制需求都去组件适配,不如直接抽个slot,放在template中语义也好看点。我看proTable封装,没有透传el-table的props,可以加个v-bind=\"$attrs\",增加一下自由度[坏笑]", 1925 | "[比心]", 1926 | "已举报标题党", 1927 | "五彩斑斓的黑?", 1928 | "为什么我的图片不显示 代码敬上let str = '456';let img = 'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fwww.uimaker.com%2Fuploads%2Fallimg%2F140114%2F1_140114095705_3.jpg&refer=http%3A%2F%2Fwww.uimaker.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1660900619&t=ab55e30320d503486a864e829b7da9d1';console.log(`%c123%c${str}%c `,'color:#ff0000;font-size:20px','color:cyan;font-size:40px',`font-size:1px;background-image:url(${img});color:transparent;background-size:contain;background-repeat: no-repeat`)", 1929 | "预设颜色我是万万没想到", 1930 | "箭头函数可以使用arguements 吗", 1931 | "网友说这个评论数不吉利,自己再发一个", 1932 | "写的非常好!下次不要在写了", 1933 | "占位符有两个%s呢", 1934 | "眼前的黑,不是黑", 1935 | "😄", 1936 | "没有考虑刷新页面,之后打印日志嘛", 1937 | "兄弟,补充一下,还有ANSI escape code。https://en.wikipedia.org/wiki/ANSI_escape_code", 1938 | "笑死,五彩斑斓的黑", 1939 | "炫酷是炫酷,但是用肉眼判断数据类型就.....", 1940 | "虽然很酷炫,但是用处不大。", 1941 | "牛逼", 1942 | "屌,收藏了[赞][赞][赞]", 1943 | "棒", 1944 | "你好 可以转载吗 会注明作者和来源[赞]", 1945 | "这个是暴露还是在index.js中导入啊,是import?", 1946 | "你好,已赞,写得真棒,大佬的博客可以转载么,会标注大佬原文链接的~", 1947 | "这块是不是少贴了一些代码、那个save应该是saved吧。", 1948 | "[看]", 1949 | "真不错", 1950 | "写得真棒,大佬的博客可以转载么,会标注大佬原文链接的~ 🤣", 1951 | "流水线代码才好读,自认为牛x的封装,给后来接手代码的人多大的痛苦", 1952 | "这里没有导出id也能引用吗?", 1953 | "写three.js项目的时候用vue3,把响应式的数据return出来,就是页面上展示的一些数据,而scene,camera这些数据不用响应式,就用普通的数据。", 1954 | "公司项目开发中,\n到底是用3.2的script setup语法糖还是3.0的 setup return{};\n望大佬们指点", 1955 | "有个问题是业务代码乱,并且频繁改,直接把它拿出去再use可能不会再去复用,那还需要拿出去吗?当然拿出去相当于分成js与html,css在单独地文件,看着确实会清晰一些", 1956 | "谢谢大佬,我悟了!看了你的文章后,我把setup里一堆乱七八槽的代码全打包扔外面去,vue文件看上去清爽很多[看]", 1957 | "react的hooks已经形成生态,用vue的自定义hook可以提升一波能力,哈哈", 1958 | "吃灰", 1959 | "Mixins 不减法也不加法,只想简单的实现和Mixins意义,方法的服用,因该如何操作", 1960 | "好多知识点需要学", 1961 | "写的非常好", 1962 | "有了vueuse写代码快很多", 1963 | "可以在hooks里执行异步操作 然后把异步操作结果export出来吗。现在有个需求封装一下高德地图,但是现在是导出时候没法把创建的map对象导出到组件中 有什么办法吗?", 1964 | "挺好的,还有插图描述,不错", 1965 | "[不失礼貌的微笑]", 1966 | "请问我什么时候写一个自定义钩子什么时候只需要写一个导出函数呢", 1967 | "有时间试试", 1968 | "请教下,vue3的那个动图在哪里能找到原图呀,想做汇报用", 1969 | "defineProps, defineEmit需要在setup中使用,把逻辑部分抽离成hooks后需要把props传递过去,我想在ts中也有props,emit的类型提示。用泛型的方式,在vue文件中把类型传递过去并没有达到预期效果,自动推导出来又是any,但是我又不想在ts文件中手动去写这俩的类型,请问怎么处理这个呢[可怜][可怜]", 1970 | "看第一个hook例子就让我想到了react hooks语法糖", 1971 | "watch 函数监听的数据源是ref,但回调函数拿到的参数又是普通数据类型,哎,类似这种设计,对新手有点儿迷啊", 1972 | "在Vue3自定义Hooks中,虽然加法和减法Hooks都返回了totalNum,但是利用ES6对象解构很轻松给变量重命名说错了", 1973 | "useAdd 里面的 num1 num2 得是响应式引用吧,addNum 写成 computed 的逻辑更合适吧。addFn 看着也没用暴露出去的必要,反正 num1 num2 变化了就要自动更新响应式结果。", 1974 | "watch(()=>([num1.value, num2.value]), ([num1, num2]) => {\n addFn(num1,num2)\n subFn(num1,num2)\n});\n我测试怎么要在组件里面这样监听,输入的时候才会响应式呀。在hooks里面监听当输入框值变化的时候watch不会执行", 1975 | "有时候透明区域多了,用webp和png体积差别不大,特别是小图标,一般大的轮播和背景图用webp真的香,用picture source保底一下png就行了", 1976 | "感谢分享,三克油。", 1977 | "页面迭代,新增了几张图片,重新打包上线时,会导致旧图片被多次压缩\n\n源文件也压缩了?不是build的时候启用一下压缩嘛,压缩完就放进dist了", 1978 | "命令中文是怎么弄的[疑问]", 1979 | "标题取得好,热度少不了", 1980 | "这个和速冻鱼一个月前写的easy-tiny-cli功能差不多哈,我们团队现在在用fast-imagemin-cli还不错。", 1981 | "我认为是你们UI背锅", 1982 | "不错,收藏了", 1983 | "不好意思,大于300K的图片,禁止上传", 1984 | "直接限制上传文件大小,从源头解决问题不更好?[奸笑]", 1985 | "所以为什么不在ci的过程中就处理,还要手动干一遍", 1986 | "二次压缩的问题怎么解决呢?怎么判断图片有没有被压缩过呢", 1987 | "请问是基于canvas的压缩吗?", 1988 | "搞了一个客户端的版本:https://github.com/zhukunpenglinyutong/electron-tiny-img", 1989 | "这种如果只是当作学习还好,但是实际工作没必要自己这么搞,UI提供的图片让他自己该压缩就压缩;如果是存在aws 这种资源服务器,你在存入的时候就会自动生成一份webp格式的压缩版。自己在项目里做下设备的判断,能用webp就去拿同名webp文件", 1990 | "强烈推荐utools的图片压缩,这种插件我也写过,效果不太好,也发到了npm上面搜索24-tinify还可以查到。", 1991 | "除非原生编写,使用框架都有插件的,直接在引入图片的时候就压缩了", 1992 | "utools里有个图片压缩 特别好用", 1993 | "[鼓掌]", 1994 | "在ts文件里咋获取持久化存储的数据呀", 1995 | "我遇到一个问题,就是两个页面中,都使用了\nimport { useUserStore } from '@/store/modules/user';\nconst userStore = useUserStore();\n进第一个页面,修改userStore下的属性,触发了缓存,\n此时进第二个页面,同样修改userStore下的属性,此时没能触发缓存的修改,强刷一下,数据持久化失效了,localStorage 还是存的第一个页面的修改内容,其实就是先进入哪个页面,缓存的就是哪个,后续的const userStore = useUserStore(); 虽然公共状态在更新,但是缓存却更新不上了", 1996 | "我一直以来都是用这个写法", 1997 | "我怎么感觉更麻烦了呢?", 1998 | "这样写优点就是语法跟vue3一样,缺点就是里面多少个方法return就要写多少个,在就是在使用的时候用编辑器跳转到变量,会跳转到return的方法里面。", 1999 | "………", 2000 | "高质量vue后台管理系统 http://vue.easydo.work/", 2001 | "有点意思", 2002 | "数据持久化的插件在这个语法中怎么使用", 2003 | "const increment = () => {\n count.value++\n}\n喜欢这样的写法😁", 2004 | "class本意就是类,分类,class就应该以功能,类型去命名。现在把类当css用就是历史的倒退。做大应用时,一堆原子css如何快速定位元素?tailwind注定只能在轻量的,响应式的网站上有一席之地。", 2005 | "这些玩意到底有什么用", 2006 | "这是不是跟bootstrap很像", 2007 | "yyds", 2008 | "tailwindcss 从二版本开始就不支持在ie中使用了,注意:是无法使用", 2009 | "从来没有见过如此优质的文章!!", 2010 | "有没有办法解决再 less 下无法使用任意值的问题啊, 比如 @apply w-[20px]", 2011 | "我已经从tailwindcss跳到windicss啦", 2012 | "挺好的,就是功能类 老是记不住", 2013 | "挺喜欢用tailwind css", 2014 | "写的真不错", 2015 | "竟然还能这样,妙啊![悠闲]", 2016 | "有很多伙伴提到说不希望使用缓存,但仍然希望能够避免同一时间的多次相同Promise的情况。实际上在文章once-init中是有提到的,refresh api正是用来解决这一问题的。", 2017 | "逻辑存在问题。多个相同的请求哪怕请求参数完全一致,也不能复用返回数据。因为存在场景,请求是用来获取hashkey,批量操作。", 2018 | "你声明一个promise变量又用cache变量存,没啥意义啊,根据promise的原理缓存一个promise就行了\n```javascriptconst cachePromise = (fn) => {\n let promise = null\n return function(...args) {\n if(promise) return promise\n return (promise = fn.apply(this, args))\n }\n}\n\n\nconst getData =cachePromise(() => Promise.resolve())\n```", 2019 | "还是vscode更香", 2020 | "这个neovim,整起来老费劲,一会这个缺一会那个缺,千万不要学楼主,普通程序员整一天装这个工具能跑起来都算厉害", 2021 | "nvim给你了多少钱啊,这么捧一踩一?", 2022 | "是时候用记事本替代vscode了[思考]", 2023 | "he tui", 2024 | "一看标题就很水", 2025 | "我感觉用了vim更容易腱鞘炎。。。", 2026 | "垃圾", 2027 | "karabiner-elements 可以改键,使用键盘操作鼠标,用了5年了。", 2028 | "vscode YYDS", 2029 | "支持你使用,我用VSCode就好", 2030 | "确实标题党", 2031 | "vim不熟,仅仅是能用的程度,不过也没影响开发,主要是没有使用场景,硬学用不上还是会忘;编辑器最主要的还是各种插件的丰富程度,早就过了折腾编辑器的年纪了,颜值过得去就行,响应速度内存大小都是能用钱解决的的问题;折腾是需要成本的,要折腾的事情多了,就不太愿意折腾工具本身了,一般轻量级的有vsc,重量级的有ws,都是能满足开发需求的;不过我还是很期待出现更优秀的工具出现,最好是开箱即用……", 2032 | "大部分公司用的还是windows开发[尴尬]", 2033 | "我是vscode+vim插件,现在的人根本不知道vim写代码多爽,懂得都懂", 2034 | "搭配 'vim-airline', 'vim-airline-theme' 之后更香哦, 跟p10k整体也很搭", 2035 | "标题党,gun", 2036 | "Kitty改了Meta为Alt只能在支持Unicode的输入法才起作用,比较蛋疼", 2037 | "适合自己的才是最好的,有点标题党的意思", 2038 | "你好 请问neovide的标题栏是什么隐藏的呢", 2039 | "不是……这不是官方的起手模板早就改成这个写法了吗?我不明白评论区为啥有人说感觉更麻烦了,这写起来不是舒服得很?", 2040 | "全球排名前二组件库 MUI,用词精准", 2041 | "我不用的原因就是担心他走iview的路,老老实实的用element吧", 2042 | "学到了[灵光一现]", 2043 | "谢谢", 2044 | "11", 2045 | "react早就有了 换个语言更快", 2046 | "真棒啊!", 2047 | "两年前的项目,还在用v1.XX已经停更了。唉", 2048 | "我居然刚刚才刷到,给大佬点赞", 2049 | "[擦汗][色][发呆][可怜][流泪][害羞][闭嘴][睡][吃瓜群众][尴尬][发怒][思考][困]新项目可以用", 2050 | "还是那句话今日的加班升级,是为了未来摸更多的鱼。那我现在在干嘛?摸鱼。那我为什么还加班?直接躺平", 2051 | "他吗的。两年前1.x版本我还在用,现在已经停更了。", 2052 | "Ant Design Vue和Ant Design React有什么区别,如果论优先级的话,是React+Ant Design React优先吗", 2053 | "文档没法看", 2054 | "用上了", 2055 | "没有用3.2的setup语法,总体来说,是唯一可以和ele抗衡的框架了,支持!", 2056 | "支持,很好用", 2057 | "啥情况啊", 2058 | "[奋斗]用了一段时间element之后果断改用antd vue", 2059 | "省流: \n1. 蹭 PR 的不要来\n2. 有钱的就支持下", 2060 | "怎么做才能像你一样优秀?真让人头疼[偷笑]", 2061 | "在优化一下吧,点快了,跟没点一样", 2062 | "卡bug了,哈哈哈", 2063 | "永远不过关", 2064 | "韭神牛B", 2065 | "韭神99999999999", 2066 | "星光大佬666", 2067 | "韭神6666", 2068 | "码字不易,老铁们学起来![呲牙]", 2069 | "火钳刘明", 2070 | "比较适合非应用级的网站 比如官网,博客,文档,产品页,因为它的唯一优点就是极致的快 小。除此之外都是缺点 比如没有react vue丰富的生态 无法做出应用级的网站或者说不适合做", 2071 | "小和尚反手就是一个asta", 2072 | "最近经常看见这个框架,先让子弹飞一会儿先把", 2073 | "这个和 Astro 相比怎么样", 2074 | "等一个尝鲜的结论", 2075 | "先别画这么大的饼, 社区能把基于vue 的高性能table 组件都屈指可数,", 2076 | "加油,希望看到不一样的内容。", 2077 | "最终的目的是让读者建立起工程化思维,掌握搭建组件库的核心方法。", 2078 | "要出vue pro components吗", 2079 | "透彻", 2080 | "期待后续,不要拖更嘞😝", 2081 | "🐣🐣", 2082 | "有点问题,可能有点优化又感觉风险>>收益\n1.在替换防抖节流的场景:显然同事更熟悉防抖节流无需造新轮子加负担\n2.在多个组件用了同一个接口的场景:我理解是代码没组织好,这个问题不应该用缓存来解决\n3.直接缓存,就算是get,时间变化后端数据更新了你还在缓存,加了开关选项也不稳吧", 2083 | "写得真好啊", 2084 | "动不动就干翻,秒杀这种标题党有意义?微软vscode非常强大,jetbrains我所用语言的几款ide我也用,冲突吗?", 2085 | "本人用过,目前不支持插件", 2086 | "之前就声明过可能有问题,现在不知道怎么样,vscode用的已经成为了习惯,估计不好改[捂脸]", 2087 | "需要破解嘛", 2088 | "真的很想说,内容不错,内容是真的很不错,给观望想体验新工具的同学,花个1,2分钟就了解了个大概。但是这种博眼球的标题也是你老被别人吐槽的原因,这种标题也就营销博流量,干IT这行的真的缺这些东西吗? 不如踏踏实实的,搞好个人口碑", 2089 | "牛哇,文章写的非常好。2022-10-21", 2090 | "天天干翻这个干翻那个,就特么不能都用啊,智障一样", 2091 | "不能安装插件,lombok都不能用...", 2092 | "**,看不到预览期间免费试用?还干翻。。。", 2093 | "拿什么跟vscode比", 2094 | "而且Windows 7上还不能用", 2095 | "感觉还是差的太远", 2096 | "太牛了[强]", 2097 | "凡人之病,不外乎阴阳。阴阳之分,总不离乎表里虚实寒热六字尽之。里为阴,表为阳。虚为阴,实为阳。寒为阴,热为阳。『《中西医精华》』", 2098 | "下载体验了一下,收费的我有 IDEA 了,就没必要买这玩意了。要说云开发、协作、多语言这些,vscode 和 eclipse Theia 都是免费开源的,没必要,毫无竞争力。", 2099 | "现在就是半成品,实际就看后续的开发和是否支持插件\n起码第一次亮相还是让人觉得不错的!", 2100 | "免费吗", 2101 | "2", 2102 | "写得还行", 2103 | "学到了[我想静静]", 2104 | "写的真不错[鼓掌]", 2105 | "我们的项目对客户说只支持chrome和Edge,其它浏览器出问题不解决[呲牙]", 2106 | "[黑脸]srds,看到这个兼容性,为什么我不用呢...通过这个我也能拿到File文件流", 2107 | "这个卡bug时候其实能看出来", 2108 | "1024", 2109 | "已点赞", 2110 | "[惊喜]", 2111 | "[吃瓜群众][吃瓜群众][吃瓜群众]", 2112 | "一些人竟搞些乱七八糟的,卷过来卷过去", 2113 | "搞个canvas的渲染直接裂开[阴险]", 2114 | "htmx和 react 的 Server Components 思想是一致的,与ssr确实不同,因为ssr只有初次渲染才会返回html", 2115 | "就是模板引擎、服务端渲染,老东西了,说实话有点花里胡哨,例如:jsp,ssr,ejs,handlebars都是,除了对要求特别高的场景需要使用,说实话几乎不怎样用,看起来提高的挺多,但是也大大增加了服务端压力(把所有的计算逻辑都放在服务端,而且返回的数据量可能过于巨大),对于一般的业务使用这些,只能说得不偿失,而且SSR现在vue,react哪个没有,用这个干嘛", 2116 | "这个也就小众范围里面用用", 2117 | "= = , 服务器资源很贵的,能让客户端做的就让客户端做吧", 2118 | "对于不需要seo的项目,让用户电脑多计算些东西不是更好吗", 2119 | "还不就是个模板引擎 整的花里胡哨的", 2120 | "前端新花样太多了[捂脸]", 2121 | "一会前进,一会倒车", 2122 | "啥玩意", 2123 | "。。", 2124 | "啥意思? htmx 是什么", 2125 | "我没看完,感觉就是干啥都发ajax,\n感觉就是和跟本地化存储那些反着来\n感觉拿来写文章 可以 ,别的不好说[呲牙]", 2126 | "jsp[奸笑]", 2127 | "这种不是一起就有了吗", 2128 | "这不就是开倒车吗?", 2129 | "没有评论吗?来个大神来说说看", 2130 | "上午知乎看完你的文章下午就从掘金看到了[捂脸],还是忍不住吐槽这玩意确实是有点画蛇添足了", 2131 | "这个真不推荐,django传值过来,js要解析一遍,如果想用MVVM,又要单独引入vue,然后传值啥的,都套来套去,反正就是难用", 2132 | "我就是django转前端,公司现在要让我写vue 又要让我写djangoTemplate 。。。。。每一天都在期待拿年终奖逃离", 2133 | "[泪奔]这不就是一个模板引擎吗?前后端分离不就是让各端专注干自己的事情。这种后端写完后台业务逻辑顺便包办页面和一部分页面逻辑,后端会愉快地答应吗...", 2134 | "好用", 2135 | "可以试试放在码上掘金上", 2136 | "您好,请问您用的是什么语言呀,看不懂您的写法,所以问问", 2137 | "66666666[睡]", 2138 | "pjax", 2139 | "服务器就那么几台,让用户自己处理不是更好,现在手机都性能过剩", 2140 | "进收藏吃灰吧[惊喜]", 2141 | "棒棒哒", 2142 | "66", 2143 | "我就问问为什么不出uniapp版?[奸笑]", 2144 | "掘除我佬", 2145 | "学习,冲冲", 2146 | "牛牛牛", 2147 | "麻了,看成了vue4", 2148 | "为什么现在好多UI库都切回了原生css 变量。貌似现在css和其他预处理器也就差嵌套和一些不常用的函数了", 2149 | "学习源码,冲啊!!!", 2150 | "赞赞", 2151 | "good,虽然源码不能完全看懂,但是大概知道是怎么回事了。必须的赞一个", 2152 | "赞赞赞", 2153 | "点赞点赞,写得好必须赞一个", 2154 | "更新踢我[呲牙]", 2155 | "好腻害 学起来[奋斗][鼓掌]", 2156 | "那个handsontable 是收费的吗? 要是免费就好了", 2157 | "插眼", 2158 | "mark[抠鼻]", 2159 | "太卷了前端打包工具", 2160 | "这东西现在能做到替换老项目的webpack吗,如果这样的话真的减轻不少痛苦", 2161 | "似乎是因为ssr,首次加载会慢一些", 2162 | "222", 2163 | "桶哥稳定发挥啊", 2164 | "vercel地址不用特殊手段一般是打不开的哦~建议自己配个域名或者用netlify", 2165 | "感謝分享", 2166 | "这种比较适合那种官网展示页", 2167 | "web应用并不只是几个函数 更多的是数据 还有各种服务 他们不可能部署到边缘节点服务器的", 2168 | "我虽然看不懂,但我大受震撼[白眼]", 2169 | "[流汗]用组件库最大的原因就是不用自己写样式,之后才是逻辑。", 2170 | "我想看后端的代码", 2171 | "可跟表格结合起来么", 2172 | "dba之建表规范:禁止创建json、blob等字段", 2173 | "666, 学到了", 2174 | "现在还在快速迭代期,拿来玩一玩还是可以的,上生产的话还是稳一点用windicss或者tailwindcss吧", 2175 | "可以请教下unocss响应式原理吗", 2176 | "还在用webpack + tailwind,以后再说吧", 2177 | "我的建议是Vitesse", 2178 | "托尼老师yyds", 2179 | "webpack怎么用", 2180 | "感觉vscode的unocss插件不是很灵敏,有时候提示出不来", 2181 | "建议直接用启动模板,免搭环境更轻松[奸笑]\nVue3: https://github.com/antfu/vitesse-lite\nReact: https://github.com/flower-f/revitesse-lite", 2182 | "厉害👍🏻", 2183 | "六六六", 2184 | "我虽然看不懂,但我大受震撼[偷笑]", 2185 | "66666666", 2186 | "cc", 2187 | "学习一波 📚🙇", 2188 | "你用React我们还是好兄弟[吃瓜群众]", 2189 | "弔啊", 2190 | "哇酷哇酷", 2191 | "如果我自己有一些个性化的需求需要二次开发的话,也是可以加代码吧?", 2192 | "unocss还有非常好用的一点:直接通过类名使用图标。这种方式比SvgIcon组件的方式更加方便灵活!", 2193 | "跳转的地址是错误的,链接末位多了个句号。", 2194 | "码文不易且行且珍惜", 2195 | "安装完,启动报错啊", 2196 | "搞错了,强制刷新是可以在 chrome devtools 里看到 Cache-Control 请求头,显示的那列 Cache-Control 是响应头里的[捂脸]不过这个倒不是很重要", 2197 | "bilibili 搜索栏 placeholder 好评", 2198 | "这种直接去拿网站举例太直观了", 2199 | "牛啊 收货颇多 点个赞", 2200 | "写很详细", 2201 | "高不成,低不就", 2202 | "不妨了解下捷码—gemcoder,目前已做到cpu-操作系统-数据库全面国产信创适配,现在正开放免费注册", 2203 | "我也做过低代码的框架 (https://github.com/moonrailgun/saucer)\n不过感觉上面向人群可能有点问题导致不吃香?(低代码的面向人群应该是喜欢拿来即用的而不是一个框架(需要自己实现内容,高度自定义))", 2204 | "低代码平台是一种全新的生产方式,可以适用于不同规模的企业甚至各行各业的各种应用场景。“远眺捷码”低代码平台内置3000+组件,数百套行业模板,快速上手,通过”拖拉拽“灵活搭建各类效果酷炫、交互式可视化系统,能有效缩短70%开发时间,减少80%Bug率,真正帮助项目开发企业实现降本,增效,提质,大幅减少了项目成本的支出,增加项目收益。", 2205 | "好家伙 文艺复兴 asp.net 重出江湖?", 2206 | "一款基于react和springboot技术栈V-LIFE快速开发平台开源了,只用写DO,VO,DTO,REQ这些后端的JavaBean和字段注释就能完成前后端功能的开发。使用V-LIFE平台进行开发研发效率提升数倍,是接活神器。\r快速了解:http://www.wwwlike.cn/quick\r现在已集成了:后端MVC全量代码,前端数据模型,API调用代码自动生成,支持jwt,按钮权限、security,前端组件库,包含菜单、资源、角色、用户、机构、字典、地区、部门模块。请放心使用全部代码开源,二次开发私有部署毫无限制。\r开源地址:https://github.com/wwwlike/vlife", 2207 | "这种东西还是要考虑使用场景的,一些数据可视化平台及报表系统,cms、crm等管理系统用用还行,给到交互场景比较负责的项目里谁用谁奔溃", 2208 | "这个项目目前已经没人维护了[泣不成声],这里推荐一下码匠(https://majiang.co/),我感觉是目前我使用过的几款国内低代码中最好用的了,UI 组件很丰富,拖拽式的,代码只用写 sql 和 js,组件间的逻辑也挺清晰的,非常不戳,最近在研究私有化部署,在本地用更放心些。", 2209 | "好东西,可以学习参考下", 2210 | "我看好多评论都不看文章的,一看低代码就说二次开发不行,这个项目都说了,生成的是代码,一点都不影响你二次开发,我觉得这个方向是一个很好的方向", 2211 | "现在低代码折磨火,真正用的人没几个", 2212 | "掘金技术社区签约计划正在招募优质作者,掘金酱邀你报名!即日起到7月31日,报名+投稿,不仅可以抽奖AirPods,瓜分2万元奖池,成为签约作者还能写作变现!现金收益、流量扶持、签约认证等你参与~ https://juejin.cn/post/7112770927082864653", 2213 | "马克", 2214 | "飞速低代码平台帮助企业降低开发门槛,并更直接更有效地完成项目;缩短开发周期并最小化运营成本;帮助公司更快地适应不同发展阶段的特定业务需求。", 2215 | "老哥,我启动完了为什么只有中间这部分,没有外面的编辑器。", 2216 | "低代码是为了降低成本和甩锅。锅如果甩不出去,做低代码肯定是痛苦的", 2217 | "低代码毒瘤,细品", 2218 | "就国内这环境,低代码真的很难发展,会敲代码的你要让他们花钱交服务费怎么可能,然后各家做各自的系统,然后收费,真的有未来吗", 2219 | "低代码在一定程度上降低程序员的工作量,同时可以促进专业程序员的岗位升级", 2220 | "数据产生到可检索时延: AVG < 1 分钟,P99 < 2 分钟。这个P50是多少数据呢,为啥不写。AVG有啥用啊。", 2221 | "嗯 写得还行", 2222 | "优大思路跟我如出一辙啊,看来方向没问题", 2223 | "更新太快了 学不动了, 搞一个项目都要2~3年 然而你已经更新N多版[可怜]", 2224 | "1. vue3的运行时已经越来越少了,我想的要是没虚拟dom大概就成1k运行时都不到了哈哈\n2.关于排名,要是神秘的东方力量要是没屏蔽,大概搜索的名词直接赶超react,咱们啥都缺,就是不却人哈哈", 2225 | "兜兜转转", 2226 | "[色]", 2227 | "👏👏", 2228 | "高定制化的应用组件用的占比真的很少很少。", 2229 | "顶", 2230 | "固删真好", 2231 | "支持vue,也一直在使用~", 2232 | "vue3现在的更新算法已经足够聪明了,之前需要虚拟节点是因为更新算法,但3之后的版本已经可以做到靶向更新,所以考虑抛弃虚拟节点其实是很合理的事情", 2233 | "果然是大佬", 2234 | "👌", 2235 | "图表的数据不准吧,有没有统计中国的开发者,感觉用vue的人,身边很多人啊", 2236 | "掘金也要做任务了吗", 2237 | "不太理解,为什么这么多国人嫌弃vue,而老外这么喜欢", 2238 | "后端代码有没有", 2239 | "好文,mark[愉快]", 2240 | "挺全的[送心]", 2241 | "uniapp使用弹框组件看不到内容是咋回事呢博主", 2242 | "厉害了,最近vue的组件库越来越多了", 2243 | "强啊,有点flutter 的感觉了[呲牙]", 2244 | "和mui比起来怎么样", 2245 | "card和table的上阴影都几乎是纯白了,也改成collapse的外阴影数值484比较好[吐舌]", 2246 | "为啥把项目拉下来后,我先pnpm i ,再 varlet dev会报错呀", 2247 | "哈哈", 2248 | "项目既然既然有死耗子参与[不失礼貌的微笑]", 2249 | "能在文档做个分析吗, 比如why 为什么选择你们这个框架,对比市面上其他的UI框架有什么特点(可以从目前市面上支持vue3的UI框架 分析 你们的优缺点)", 2250 | "谷歌在Android 12推出的Material You UI个人风格感觉更舒服,有这种风格的UI框架开发可能性么?", 2251 | "这个和elementUI哪个好", 2252 | "Divider建议加个粗细属性,然后默认可以是0.5px,毕竟0.5px的分割线在移动端设计稿中很常见", 2253 | "感谢同学们的支持哈~ 祝大家的学习工作生活都顺心,再次感谢[玫瑰]", 2254 | "用上了,感觉组件效果不错", 2255 | "uni-app和taro这些能配合吗?", 2256 | "组件库如何构建的??从0-1 介绍一下??", 2257 | "多分享一些有关 Web Components 相关的内容呗", 2258 | "你们对应的vue那个form表单组件,这种错误。。[思考]", 2259 | "我的评价是多此一举,pc端antd、element移动端vant其他的框架完全是为了造轮子而造轮子", 2260 | "等他长大了再用", 2261 | "思路很棒呀,组件库什么的其次,主要是使用webcomponents,针对不同的语言顶部再做一层处理,核心是这个,一份代码可无缝运行到各个框架库。就是组件库开发什么都需要重写,比较麻烦。", 2262 | "单车没见到几量,搞框架干嘛[机智]", 2263 | "选择组件库的原因之一是UI好看", 2264 | "怎么跟vant也太像了把", 2265 | "这不是模仿vant吗?", 2266 | "移动端兼容性怎么样?", 2267 | "fork了一份优秀的UI库, 然后改一下UI规范 = 下一代UI框架", 2268 | "所以是为了绩效吗?", 2269 | "说是支持tree-shaking,亲测 bundle 的时候还是全量打包了。建议改一下组件的顶层副作用,和package.json 的 sideEffects 字段。", 2270 | "能在gitee搞一份吗,进去有点慢", 2271 | "这让夸克事业部以后推出组件库怎么取名[奸笑]", 2272 | "[憨笑][憨笑]", 2273 | "你的官网都卡成翔了,你确定你的组件性能ok?[捂脸]", 2274 | "听君一席话,如同听君一席话[谢谢]", 2275 | "我选 valtio ,也很小,也是 Reactive", 2276 | "厉害,长见识了[吃瓜群众]", 2277 | "不错,有空再看一遍。", 2278 | "我选择ahooks的useReactive。\n身在React旁,心里却是Vue。", 2279 | "写的真好,本来不想看的,不成想看完了", 2280 | "666这也行", 2281 | "可以可以", 2282 | "就凭写的多这一点就得点个赞", 2283 | "你他娘的真skr人才[奸笑]", 2284 | "懂的真的太多啦[发呆]", 2285 | "牛啊", 2286 | "笑死我了", 2287 | "哈哈哈,文笔不错", 2288 | "你好坏啊,我好喜欢[坏笑]", 2289 | "看作者名字就知道不简单[看][看][看][看][看]", 2290 | "跟读小说一样[强]", 2291 | "这不早都有了", 2292 | "不懂就问 样式为啥要给class属性。感觉有点别扭。 JSX固定的么?(从来没接触过JSX)", 2293 | "这这这这,不就是cssModule吗", 2294 | "有个问题,动画关键帧可以写吗?css中的hover和active这些可以写吗?", 2295 | "已学会,速删", 2296 | "知道了,学习了", 2297 | "好文,mark[赞]", 2298 | "感觉还阔以", 2299 | "好了,现在知道了", 2300 | "不错~~", 2301 | "很好的一篇文章,这让我想起之前遇见的一个问题。\n一个页面有两个入口,当前页面的上一步导航栏怎么显示。", 2302 | "大佬的专栏看了,牛了,直接收藏收藏!", 2303 | "如果导航栏需要是动态的,比如根据权限或者后台服务的状态,可选择的余地就少很多了", 2304 | "好文,收藏了[憨笑]", 2305 | "66666666[抱拳]", 2306 | "https://marketplace.visualstudio.com/items?itemName=CHENJIE.fleet-dark 这款Dark主题非常好看,用vscode的伙伴别错过。也可以在vscode插件市场直接搜 Fleet Dark。", 2307 | "太多了", 2308 | "你小子你小子", 2309 | "自动闭合插件vs code现在内置支持了", 2310 | "你小子", 2311 | "nixiaozi", 2312 | "看着这么多东西,俺就不舒服!", 2313 | "webstrom 用的舒服,智能提示是vscode达不到的体验。", 2314 | "舒服", 2315 | "你竟然会写代码[奸笑]", 2316 | "66666666[奋斗]", 2317 | "实现思路挺棒的,不过这种如果对于安全性来说,比较低,UI层去控制功能逻辑,这个还是得看这个功能的重要性来做取舍", 2318 | "思路确实很优秀,就是实用价值有待商榷[吃瓜群众][吃瓜群众][吃瓜群众]", 2319 | "极端场景下还是有问题的,pointer-event:none后鼠标会穿透按钮点击到下面的元素。可能会带来一些问题", 2320 | "侦探的思路打开了", 2321 | "F12,类名一删(或随便改下),狂点", 2322 | "为什么在active的时候要 transition: 0s;啊", 2323 | "思路挺好,但还是js好使通用", 2324 | "[看]tab 聚焦,enter 狂点,节流告破", 2325 | "狠", 2326 | "太秀了", 2327 | "学习了[赞]", 2328 | "不错不错、学到了[色]", 2329 | "思路很棒", 2330 | "思路可以的", 2331 | "css控制确实比js好很多", 2332 | "可是如果使用 trantstion 定时,如果遇到急性子反而容易让他暴躁。", 2333 | "刚进来的时候点不了呀", 2334 | "好思路啊[思考]", 2335 | "[尬笑]也就是说,进来2秒后,俺才能动你?", 2336 | "纵观前端历史,分久必合,合久必分", 2337 | "😳", 2338 | "没区别啊", 2339 | "感觉不如module.scss。。。。。。方便", 2340 | "Vue里就有啊[发呆]", 2341 | "刚才闺蜜问我:“你觉得什么饮料最好喝?”\n我 : “奶茶吧...你呢???”\n闺蜜:“泡面汤!!!”", 2342 | "我虽然看不懂,但我大受震撼[嘴唇]", 2343 | "写啊还行", 2344 | "咋还不给我过审啊", 2345 | "还有一个方法,是用一个伪元素遮住原来单色边框的一半,达到两种颜色边框的目的,不过这样需要设置定位,各有优劣", 2346 | "这东西之前踩过坑 他没法和border-radius公用 会让圆角样式消失[发怒]", 2347 | "有亿点东西", 2348 | "moment官方都推荐别的库了", 2349 | "检测对象用instanceof不就可以了吗?", 2350 | "这个节流有效吗", 2351 | "不错,看过不少分享的都不是太多。有没有做个开放工具库,现在除了自己总结,就是手写或者百度。。", 2352 | "有收获·👍", 2353 | "moment不是都被主流框架淘汰了,来个新点的[呲牙]", 2354 | "好文,mark,大佬厉害", 2355 | "如果说是避免重复造轮子 你这列举的好几个都能用lodash里的方法直接用 还有moment都不维护了 你不管是用这种时间库算什么 好歹还不用个一直在更新维护的么?要不就换成原生date", 2356 | "判断函数为什么不用instenseof呢[疑问][疑问],是有特殊的情况会判断错误吗", 2357 | "可以用requestAnimationFrame做回滚顶部吗", 2358 | "大佬666(经验加3)", 2359 | "感觉也可以叫once-request", 2360 | "很有想法,厉害厉害", 2361 | "标题党 害我以为是啥不得了的东西", 2362 | "只是实现方式不一样,称不上更底层吧,这种说法有一定标题党的嫌疑。", 2363 | "有没有一种可能,同一个请求在不同时间返回的数据不同,你直接cache,是不是就会造成数据延迟的问题。", 2364 | "我的评价,不如[看]\nconst oncePromise = (fn, p = null) => (...arg) => p ? p : (p = fn(...arg).finally(() => (p = null)));", 2365 | "应该可以直接在axios里封装做重复请求的缓存吧", 2366 | "为什么不直接在http请求过程中,添加专门的缓存拦截器实现数据缓存?还可以做到统一配置和管理", 2367 | "不明觉厉[可怜][可怜][可怜]", 2368 | "加油,很不错的想法。我会拜读一下源码", 2369 | "非常喜欢,谢谢贡献", 2370 | "这种只能用于数据没什么变化的,有变化的不适用,数据改变了,还用缓存的,就有问题了", 2371 | "应该 不用那么复杂 useSwr 就够了", 2372 | "我也封装过针对Promise的缓存请求,但没有像楼主这样考虑这么多情况,拿来用用试试[呲牙]", 2373 | "可以看一下 SWR", 2374 | "这种最大的问题还是增加心智负担,大部分开发者不会引入到公司项目来的,不然每一个参与开发的人员以后都要了解这个库的用法,代码耦合严重(不利于后期替换代码),个人库的话会存在断更风险,毕竟google都开了那么多kpi项目,说实话不看好[吃瓜群众];(一家之言,不是针对楼主,纯主观意见,如有冒犯,那就是我说话难听)", 2375 | "...", 2376 | "前端这块感觉cai 的人还是挺多啊!!!!!!!!", 2377 | "Mark", 2378 | "了解熟悉了", 2379 | "config.module.rule(name).oneOf(type),也没说明是干啥的啊?", 2380 | "太强了", 2381 | "内容不错,加油", 2382 | "可以了", 2383 | "收藏=会了", 2384 | "挺好的", 2385 | "占楼", 2386 | "来试试!", 2387 | "来了", 2388 | "来啦", 2389 | "马甲该重出江湖了", 2390 | "0-3级?亏大发了啊[我想静静]", 2391 | "很需要这个行李箱,下个月努努力[奋斗]", 2392 | "最近也做了个基于vite和vue2的文档系统,参考的tdesign,想了解下你的思路。", 2393 | "感谢大佬[呲牙]", 2394 | "开源么。[不失礼貌的微笑][不失礼貌的微笑]", 2395 | "学到了[凋谢]", 2396 | "ahooks的useReactive\n修改数据后永远都是最新值,不再反直觉了,\n组件传这个响应式对象,因为引用的同一个对象,也不会造成组件重复渲染了\n真的舒服", 2397 | "好文章\n话说fu老师有个库就是在react里面用vue", 2398 | "本来以为我已经够强了,没成想还有比我更勇猛的人,这是谁的部将!?看到一半我觉得自己是个废物不想再看了", 2399 | "大佬 你怎么什么都知道啊。你是肥虫不[思考]", 2400 | "受益良多,这才是掘金不可或缺的好文章", 2401 | "学习了[思考]文档之前很残缺,后来好多补上了,之前写的时候光在翻着库的代码。", 2402 | "React不是解决状态管理问题的,这个可以交给Redux和mobx,Hooks引入的数据管理功能也是聚焦在UI相关的数据逻辑\n从架构的理念来说,越是focus在某一基础领域的框架,越容易形成生态系统,比如Spring和Docke\nReact长期以来聚焦的就是如何高效(高性能+高生产力+高可维护性)开发UI(不仅仅是Web)\nReact最伟大的一点是,用最少最统一API可以实现各种UI,在这一点上,其他框架存在数量级级别的差距", 2403 | "文笔太好了受益良多", 2404 | "这样的情况下要nodemon完全没有用武之地了呀。", 2405 | "为啥删除--experimental-specifier-resolution 改成自定义 感觉之前的很好用啊", 2406 | "水", 2407 | "这是我一个学生写的作文《我的妈妈》:“我的妈妈,满脸横肉,蛮不讲理。拿了邻居忘在电动车车框里的肉,人家找来还不承认,我觉得好丢脸。。。”", 2408 | "香吗?", 2409 | "引擎为啥叫v8,会有v9 v10吗?[奸笑]", 2410 | "🤒", 2411 | "求思维导图zip包。我是学生。。。希望你不要不识抬举[看][看]", 2412 | "做的不错,下次接着做", 2413 | "做的很棒", 2414 | "get", 2415 | "画的不错", 2416 | "这个思维导图太好看了", 2417 | "我现在还在vue2", 2418 | "你好,想问下思维导图用的什么工具", 2419 | "你好,是否可以转载您这篇文章,备注来源和出处", 2420 | "吃灰(收藏)[奸笑]", 2421 | "收藏不看系列", 2422 | "收藏=学会", 2423 | "好文章啊", 2424 | "思维导图的软件 用的是什么", 2425 | "mark 谢谢作者!", 2426 | "强!", 2427 | "3.2.42版本有大变化吗", 2428 | "我爱你", 2429 | "https://tzy1997.com\n个人友链,欢迎互访~~[奸笑]", 2430 | "可以当成兴趣来玩,不建议实际项目中这样写", 2431 | "这几天遇到也是,遇到疯狂请求", 2432 | "怎么做才能像你一样优秀?真让人头疼[尴尬]", 2433 | "turborepo优势在于项目大的时候,可以并发执行,项目初期跟lerna效果差别不大", 2434 | "收藏吃灰", 2435 | "建议火速更新下一篇嗷", 2436 | "不试用一下Bit??", 2437 | "好文,mark[胜利]", 2438 | "在最后一步失败了\nThe following arguments were not expected: --all-architectures --timestamp=none", 2439 | "好文,收藏了", 2440 | "为什么Mac要装winds", 2441 | "是一下", 2442 | "强的离谱", 2443 | "我在想可不可以把联动逻辑 独立出来 通过插件的方式注入到表单,降低逻辑和表单的耦合性,只是个想法哈哈哈", 2444 | "这是比较理想的状态,现实是表单逻辑比这复杂,应该设计一种扩展性强的联动机制", 2445 | "架不住产品在表单塞交互, 所以我一直在手写这个", 2446 | "基础组件有待完善,比如表格组件,", 2447 | "有些组件样式跟quasar的好像啊", 2448 | "大佬,可以写文章系统介绍如何写一个组件库不?付费的课程也行!", 2449 | "第54条留言,强如若川", 2450 | "3.2 destop 端 ------>是desktop吧", 2451 | "期待大佬的下一篇文章", 2452 | "老哥,你们能不能推出taro vue3版本呢,taro框架非常优秀,但是组件库生态太差,nutui完全没法用,太多bug了[哭笑]", 2453 | "我已经用在生产环境了,再不发正试版本,怕顶不住了[捂脸]", 2454 | "大概懂了,就是预先写好对应的主题类,切换主题是指定对应的类名。iframe没用过emm。", 2455 | "还以为你要一个替代jenkins呢", 2456 | "不建议只用curl的方式来处理,最好启用一个超时服务来检测,服务异常、jenkins 异常都会导致错误没办法上传", 2457 | "恩比", 2458 | "🤓", 2459 | "君子养心莫善于诚。《荀子·不苟》", 2460 | "就喜欢玩的花的[看]", 2461 | "学习了[强]", 2462 | "重复造轮子", 2463 | "写的可以", 2464 | "还行", 2465 | "[看]你这还不如将这些信息放到和项目文件根目录的一个固定文件里面,比如version.js 然后只有内部人通过固定的链接打开才知道对应的版本信息。这样,不仅更安全,也可以解决你所要的那些问题", 2466 | "牛哇,文章写的非常好。2022-11-27", 2467 | "『〖【龍圖騰·释德诚·《船子和尚拨棹歌》】〗』", 2468 | "来了,老弟", 2469 | "写的不错", 2470 | "相比于 react 和 vue ,这个框架的优势是什么,解决了什么痛点?", 2471 | "跟react很像,性能快一点体积小一点意义不大,要像jq到react这种升级才能吸引我,我很挑的[看]", 2472 | "我为啥不直接手写js?", 2473 | "我为啥不用html[发呆]", 2474 | "[发呆]这有什么用呢", 2475 | "????我为什么不用React呢?", 2476 | "我为啥不用react", 2477 | "好文,收藏了[v5]", 2478 | "好文,收藏了[灵光一现]", 2479 | "好文,收藏了[比心]", 2480 | "定位组件,我第一时间想到的是 和用户定位授权相关的业务组件[捂脸] 不好意思,博客你这个功能很好,不过名字可以换一换", 2481 | "孟总,这个floating-ui你不说我都不知道,听你一说,感觉很吊的样子", 2482 | "写定位组件的时候都知道有这么多坑[发呆]", 2483 | "flouting ?", 2484 | "几年前就在看这块的源码了 但还是由于内容太多 放弃了", 2485 | "收藏了[不失礼貌的微笑]", 2486 | "这是官网是demo页吧,页面切换连动效都没有,我都怀疑是盗版的", 2487 | "Swipe没做距离限制吗,稍微滑动一下就过去了", 2488 | "JQ的使用教程有吗,弄了几个组件进去使用好像没生效", 2489 | "去年我也想过,自己用web components做一个ui框架出来玩玩,结果写到后面不会写了[我想静静]现在你们弄出来了,我去看看,解解惑", 2490 | "继续卷吧", 2491 | "组件前缀太长了,直接qk- 这样就行,太长了不仅难记还影响使用", 2492 | "很棒啊", 2493 | "终于有团队把我的想法实现了,用 Web Components实现", 2494 | "不错,就喜欢不依赖任何框架的", 2495 | "示例文档上组件感觉有些粗糙,比如说双击按钮会莫名选中按钮下面的文字,无障碍也没有", 2496 | "文档让我想起来vant", 2497 | "那首屏和webpack 比呢", 2498 | "Vite首屏消耗在 浏览器请求大量的.vue文件所产生的http时间,组件拆的越溪,文件越多。", 2499 | "有什么优化的方式么", 2500 | "老妈一直催我结婚,刚才我对我妈说,我喜欢一个很优秀的男生,但是感觉没有机会...\n我妈说,你怕啥,你虽然很丑,但能有机会接触到这么好的人,说明他命中注定有此一劫。。。", 2501 | "vite首屏,给我搞懵了", 2502 | "闲得蛋疼", 2503 | "Node生态目前来说,取代不可能", 2504 | "用了一段时间 deno,现在已经习惯用更少更安全的代码来写脚本。足够少,足够简单。", 2505 | "没懂它解决了什么关键性的痛点", 2506 | "1.某xx小哥,竟靠一个xxx直接封神!\n2.看xxx写的代码,那叫一个优雅!\n3.XXXX面试官竟然这样问?再不学就out了\n4.工作这么久了,还不懂xxxx吗?\n5.面试官:知道xxxx是什么吗?在xxx中怎么用的?和xxx有啥区别?\n6.xxx大厂是这样写xxx的,你造吗?\n7.还在用xxx?快试试XXX,性能提升100倍!\n8.xxx技术已死,XXX称王!\n9.20xx年了,你竟然还不会xx?\n10.吊打xx大厂面试官,我这样解释xxx\n11.学会xxx,大厂offer拿到手软\n12.自从掌握了xxx,工资翻了番\n13.吊炸天,xxx还有这种用法!\n14.有追求的coder,具备了哪些习惯?\n15.纳尼?又有bug,xxx竟然有这些问题\n16.xxx技术的十个好方法\n17写xxx的20个技巧\n18.xxx不要只会xxx,试试这几条写法\n19.还不会xxx吗?一招解决\n20.初看xxx一脸懵逼,看懂直接跪下\n21.我受精了,xxx竟然还有这种用法!\n22.为什么xxx大厂不让用xxx,原来有这种原因\n23.xxx只看这一篇文章就够了\n24.再有人问你xxx,把这篇文章丢给他\n25.吐血整理xxx技术,免费送\n26.可能是xxx技术最好的一篇解释\n27.必看!xxx,傲视诛仙\n28.看完这个,还不会xxx,请你吃瓜\n29.看完这篇xxx,跟面试官聊骚没问题\n30.真的,xxx入门看这个就够了\n31.面试最爱问的xxx\n32.xxx真的很骚,可惜你不会\n33.xxx太复杂,大神直接干掉它\n34.弱智都能看懂的xxx,错过血亏\n35.10秒钟搞定xxx\n36.从零到一的xxx,保姆级教学\n37.我以为我很懂xxx,直到我遇见了xxx\n38.使用xxx后,摸鱼时间又长了\n39.学会xxx后,我被录取当总监了\n40.这篇xxx,我吹不动了\n41.谁要是再敢用xxx,我过去就是一JIO\n42.xxx就是这么简单\n43.面试官问我xxx,我哭了\n44.面试xxx,99%的人都爱问这些问题\n45.还在xxx,试试xxx", 2507 | "学到了,希望用不上", 2508 | "666666666666666666", 2509 | "👍", 2510 | "安排了一个 [呲牙]https://github.com/kirklin/mourning-page", 2511 | "好棒!", 2512 | "CSS,只服coco佬", 2513 | "学习了[呲牙]", 2514 | "[强]", 2515 | "珍爱生命,远离一切低代码[呲牙]", 2516 | "有开源的打算不,这个是真不错,做的挺好", 2517 | "[微笑]", 2518 | "开源了?有地址可以学习不", 2519 | "开源啦?!先点赞收藏再去看", 2520 | "说一下价值", 2521 | "不错👍", 2522 | "产物是什么呢", 2523 | "666666", 2524 | "想问个问题,关于动态路由那里,采用文中的“权限控制路由的创建,而非创建出路由再根据权限去拦截”,也即没有权限的路由压根不创建,这样是不是无法区分 404 还是 403 了,访问一个正确的但只是无权限的路由页面,提示的也是 404 了吧", 2525 | "ant3的时候圆角是4px,4的时候圆角是2px,当时记得理由说的是2px比较什么严肃,适合正经场合。现在5又特么给改得这么大的圆角,闹着玩一样。", 2526 | "移除 less 及相关 less 和 css 产物? 所有组件使用 CSS-in-JS 重构样式? 这", 2527 | "有点眼熟,不确定在看看", 2528 | "使用less等css var的v4怎么升级v5呢? 官网整的太不详细了.\n期待大佬相关文章[呲牙]", 2529 | "之前有想过用 lazy 懒加载 但是 路由切换动画就不生效, 动画是两个已经生成的组件的过渡, lazy 的话 组件还没加载 路由切换就比较生硬了 。想看老哥这块有什么 idea 去实现。", 2530 | "登录不上去,报500了[流泪]", 2531 | "你实现一下,tab动画嵌套tab动画路由,我感觉这里面有bug", 2532 | "🥰🥰🥰", 2533 | "混脸熟[无辜呆]", 2534 | "阿里的各种KPI项目,我感觉我以后尽量都不会选择阿里的,除非没得选。\nantd,用着用着,Modal的visible,突然改成open。。。真的是醉了。这跟当年圣诞节彩蛋一样的恶心。", 2535 | "怎么一年没写可就到5了,之前我们用的是antdpro路由权限这一块是后端把所有路由都返回了过来,不过加了auth字段,然后封装了个权限方法,export default组件的时候包一下,如果他有权限就返回没有就不返回了", 2536 | "[偷笑]", 2537 | "你小子[看]不讲武德是吧", 2538 | "每次提交都有文件变动,好坑", 2539 | "哈哈,有趣", 2540 | "就是你小子是吧,明天下班别跑。厕所等我。[看]", 2541 | "如果 imports 的上下有逻辑语句,例如 const xxx 时会有怎样的行为?如果能变更代码,又不导致代码逻辑变更,就很有趣哈哈", 2542 | "可以", 2543 | "我一个后端看着很入迷", 2544 | "好文,mark[666]", 2545 | "一生二,二生三,三生万物。真妙呀😉😍😘", 2546 | "围观大神的文章", 2547 | "好用且灵活,祝越来越好!", 2548 | "是不是也没法整合第三方的组件库?感觉如何能整合第三方的组件库是非常强大的", 2549 | "这次改版后,比之前好看好用多了,性能也比之前更优,加油!", 2550 | "灵活好用,强推", 2551 | "的确好用,非常推荐", 2552 | "非常好用,强烈推荐~~冲冲冲", 2553 | "用过,确实不错", 2554 | "越来越好👍🏻👍🏻👍🏻", 2555 | "希望 也有vue版本", 2556 | "66666666[666]", 2557 | "点赞,强大~", 2558 | "棒[色],是市面上功能最强大的表格搭建开源项目了", 2559 | "进收藏吃灰吧[敲打]", 2560 | "去年说的也是这些", 2561 | "科普好文 可以公众号转载吗? 会注明出处", 2562 | "ziglang", 2563 | "可以参与年终总结征文呀", 2564 | "好文,收藏了[握手]", 2565 | "我一般用https://www.jsont.run/ 来预览JSON的同时快速mock和生成API,还是很方便的", 2566 | "这几天如果你在大街上看到一个男人好好走着路,突然双腿一颤,状似太空步,又像霹雳舞,走几下还来个小跳步,似魔鬼的步伐,那一定是秋裤夹腿毛了。。。", 2567 | "[强][强][强][强][强][强]", 2568 | "nice", 2569 | "做一层转换虽然比较麻烦,不过和vue保持一致,开发体验确实比较ok", 2570 | "element-ui 定位其实处理的还可以", 2571 | "可以,这个代码很优雅", 2572 | "https://github.com/MicrosoftEdge/MSEdgeExplainers/blob/main/CSSAnchoredPositioning/explainer.md\n大家需要关注anchor了。", 2573 | "浮动元素", 2574 | "我想知道对于小程序的话,上面所述的功能是不是无法实现(下拉框遇到边缘,弹出框自动换位置)", 2575 | "[吃瓜群众][吃瓜群众]", 2576 | "防抖和截流那两个函数怎么使用,插件市场里面的没看太懂", 2577 | "[奋斗][赞][奋斗]\n不错!\n\n也可以加入组件库喔,自荐一下我们的FirstUI组件库,移动端宝藏级组件库。\n\n目前微信小程序版+uniapp版更新至1.6.0,完美支持vue3。 First UI(https://www.firstui.cn/)是一套超高性能、超高颜值的移动端UI综合解决方案,包含业内顶尖的组件库、强大的功能库、丰富精美的模板库,提供uni-app(完美支持nvue)、微信小程序、支付宝小程序等版本,兼顾高效率与高性能,让您的开发获得百倍提质提速!", 2578 | "看起来没啥卵用", 2579 | "参照您的方法 试了下 无效", 2580 | "能不能换个封面", 2581 | "mark一下", 2582 | "先mark,以后可能会用到", 2583 | "[菜刀]", 2584 | "主任我又来了,canvas画图的项目接吗?图形不是很多,就是小圆圈和方块,连线,label标注,主要是实现虚拟滚动,即scroll滚动,绘制范围内的图形,要求万个对象的绘图。", 2585 | "说真的 你把官网教程复制一遍有啥意思呢", 2586 | "我这个比较聪明,收藏就学会了,就不点赞关注了[看]", 2587 | "哈哈哈哈今年春节那个活动用P5结合音乐流放烟花来着", 2588 | "这个库的方法全都注册在全局了吗", 2589 | "这个库看着很容易上手,有种在写vue的感觉", 2590 | "新技能get!!!下次碰到这种需求多了一种工具选择了嘿嘿", 2591 | "怎么不参加这一期的金石计划了[黑脸]", 2592 | "主任又整新活了", 2593 | "学会了~[强]", 2594 | "和pixijs比,有啥优势", 2595 | "木有价值", 2596 | "应该看你想做什么,才去学对应的语言", 2597 | "2024年应该也是这些[偷笑]", 2598 | "海康或者大华的监控流在浏览器内播放张老师有研究吗?", 2599 | "[吃瓜群众][吃瓜群众][吃瓜群众][吃瓜群众]", 2600 | "长见识了", 2601 | "可以啊666", 2602 | "咋哪都有坤坤", 2603 | "下一次,是给哪个大人物置灰", 2604 | ":not()这个方案怎么样?", 2605 | "这么比起来,我觉得还是百度的方案技高一筹[捂脸]", 2606 | "filter 置灰的办法,会导致定位异常的,头很大,而且部分安卓机型上,尤其是鸿蒙系统,html 的写法会导致有的字体莫名其妙变得很大", 2607 | "v.staycolor = true 是什么意思?[疑问]", 2608 | "进收藏夹吃灰去吧", 2609 | "为什么配图是坤坤,你知道他有多努力吗[看]", 2610 | "小黑子,露出鸡脚了吧[尴尬]", 2611 | "苏珊", 2612 | "你最好是[微笑][微笑][看]", 2613 | "哭", 2614 | "dart有取代js的潜力.", 2615 | "抄别人的作业也不说抄谁的。你这篇类似的我都看了好几个了", 2616 | "原来是易语言呐[不看][不看][不看]", 2617 | "看不明白", 2618 | "666666666", 2619 | "不如在浏览器实现原生ts[奸笑]", 2620 | "就像4g,其实大部分人够用了,但是为了5g还能赚钱,所以要抛弃4g", 2621 | "一本正经的胡说八道", 2622 | "粗略一看没懂大佬布道E语言的原因", 2623 | "能好好说话么,为什么这么标题党[捂脸]", 2624 | "我是掘金杜兰特,得分王", 2625 | "js是真的好用", 2626 | "戛然而止的感觉。", 2627 | "[撇嘴]", 2628 | "不是学TS吗,为什么是E?😂", 2629 | "E语言是啥,能给个出处?", 2630 | "e语言? 信息框(\"HELLO WORLD?\"); ?????", 2631 | "想知道有没有关于编程语言设计的书籍(非编译原理)", 2632 | "好家伙,我直接失业。", 2633 | "国内竟然不让用[哭笑]老外对咱们技术封锁很严重啊", 2634 | "能帮我写CRUD吗", 2635 | "55", 2636 | "挖坑埋自己", 2637 | "有vue版本吗", 2638 | "自定义渲染只能写 html ,不是很实用啊,而且弹窗只能弹出网页也不符合实际需求。这两个难点后续有规划吗", 2639 | "多按钮还在报错[看]", 2640 | "体验了下,交互上感觉这里有点不太恰当,功能上看这里是选中列的操作,却放在表头后面的“...“", 2641 | "值得学习", 2642 | "现在组件库怎么都没有拖拽列,多列排序的功能[无辜呆]", 2643 | "听君一席话,如同听君一席话", 2644 | "秀儿", 2645 | "你就说快不快吧", 2646 | "我和他曾经是情侣,分手后多年未联系,刚才,他突然发来一条消息:“还好吗?”\n我心中一暖,回复:“很好” 。\n很快,他回复说:“现在好不等于将来好,人有旦夕祸福,未来难以预料,为了家人,买一份保险吧。。。”", 2647 | "strijgfy不仅仅判断啊,他还实际做了处理生成了字符串啊,你这样简单的对比,数据没有说服性那", 2648 | "mark总结下,因为类型判断所以慢,解决了这个问题直接字符串输出就快了", 2649 | "stringify 内部有很多动作, fn1 和 fn2 的直接对比的意义是什么?这个差异为什么就能说明“类型判断很耗时”这一结论?", 2650 | "静态能用吗?", 2651 | "66666666[握手]", 2652 | "三连啦,之前在b站看了一点点视频,但是对我来说还是太难啦~ 这波专栏我觉得我可以好好看看~ 哈哈 主任冲~", 2653 | "看了你的帖子,必须的回!。", 2654 | "虽然同为济南人,不过我已经在家待业三个月了[灵光一现]", 2655 | "说白了,这不就是“反向人口红利”吗哈哈哈", 2656 | "对于行业来说,人多了自然看学历[呲牙]", 2657 | "[看][看],", 2658 | "相当赞同~", 2659 | "中国就是不缺人", 2660 | "绝大部分工作,不需要学历.那么问题来了,你想做那些工作吗?如果,没所谓,也能开心,那就不需要纠结工作.但是,有少部分极其复杂,培养周期很长的工作是真的需要一定的背景,起码你人格得没问题吧.哦,你说你干掉了谁谁谁都能进大学,那只能是大学的悲哀了...大学文凭起码证明了你16年里都没犯大错,不会把企业主送走....", 2661 | "你们小程序上线没人测试的?[发呆]", 2662 | "root-portal怎么解决filter里的fixed问题了 ,贴下代码", 2663 | "小程序就是个天坑,堪比ie,有些地方更过分。", 2664 | "现在小程序审核那么快了吗?还是有啥快速上线的新姿势", 2665 | "原来还有这种坑?", 2666 | "我提的,官方时隔近2年回的我", 2667 | "微信小程序大坑", 2668 | "貌似html也有问题,那天我在后台中加filter:blur(5px),fixed定位就有问题了", 2669 | "什么社区[发呆]", 2670 | "你好 这篇可以转载吗 会注明作者和来源[赞]谢谢", 2671 | "定位一个蒙层加个点击穿透就完事", 2672 | "搞得挺好。", 2673 | "niubility,猛~!", 2674 | "vivaldi 浏览器 适合你", 2675 | "我用的是vimium,只喜欢一个功能:就是在网页中想搜索新东西时,不需要打开新标签搜索。想要百度就按b,想要谷歌就按g。其他的用的比较少。", 2676 | "下过,感觉没那么好用。必须网站加载完才能搜", 2677 | "虽然但是,为啥8月前的一直在我首页[疑问]", 2678 | "单身的男性都不要用omni", 2679 | "好东西", 2680 | "感觉现在的文章质量不啊", 2681 | "好用么", 2682 | "脱裤子放屁", 2683 | "ctrl+shift+a???搜索打开的标签和历史,edge和chorme现在不都自带了码", 2684 | "是挺不错, 但是我觉得alfread基本也能做到, 无需再花成本学习这个了", 2685 | "对于钟爱轻量化的观众,自带的搜索功能也够用了,而且分类管理好自己的标签就能快速找到想要的,提升一下收纳能力。哈哈哈[吐舌]", 2686 | "好文,mark[奋斗]", 2687 | "滴滴滴滴, vivo vivo", 2688 | "haoziqaq[可怜]", 2689 | "哇,又学到了🤩🤩🤩", 2690 | "求第八个的主题🤩", 2691 | "点赞", 2692 | "Yyds", 2693 | "Framer 开源的 motion 动画库也很强大", 2694 | "4.0还没解决首屏慢的问题吗", 2695 | "vite4?这太快了吧?", 2696 | "vite4 里面的@vitejs/plugin-react-swc 这玩意是不是对react 有版本的要求啊", 2697 | "我只试了一下vite2,这么快就4了", 2698 | "对于不需要非标准 React 扩展的大型项目。这句话啥意思", 2699 | "我们有必要从vite3切换过来么", 2700 | "可以玩玩!", 2701 | "妙啊", 2702 | "进收藏夹吃灰吧!", 2703 | "66666666[赞]", 2704 | "[奸笑]动图好评", 2705 | "可以的~", 2706 | "Placeholder也想申请出战", 2707 | "这个是干啥的", 2708 | "已经替换为iview了", 2709 | "2的站点样式太丑了,比不上1,拒绝升级", 2710 | "vue有没有类似的组件文档库以及组件打包库可以用?\n就像react的dumi+father-build这种组合", 2711 | "你的 移动端 theme 会更新吗?", 2712 | "[庆祝][庆祝][庆祝],看到dumi发正式版就去实践了一波,使用过程中发现一个小bug,还给dumi提了个pr,经过一番折腾也终于弄了一个自己的文档栈出来https://gaoxiaoduan.github.io/leetcode-js/,整体下来,体验很棒,界面设计感觉更优雅了,特意回来支持一下[玫瑰]", 2713 | "我想知道dumi跟umijs有什么关系", 2714 | "Demo不支持Vue吗", 2715 | "在线等Peach哥的掘金,pr中学到了许多", 2716 | "[睡]", 2717 | "mark 一下", 2718 | "我还以为dumi是得物出的。。", 2719 | "dumi确实不错[泣不成声]", 2720 | "学到了,卧槽,o", 2721 | "确实", 2722 | "为了刷新token,就又多了一个token,只要我的套娃够多,黑客就懒得理我了,入侵成本太高了[尴尬]", 2723 | "redis可以处理多主机登陆状态同步问题。没有内存问题。csrf攻击,修改一下axios的拦截器就可以处理,我记得他本来就有个属性处理csrf攻击的。\n我感觉我有点看不懂,对外暴露出一个刷新api,然后入参是一个旧的token?这个有什么意义。\n有心之人直接在前端拿到你的token,写个脚本一直调用接口刷新这和永久的有什么却别?\n另外的问题。\n无状态真的好么?", 2724 | "哈哈,我们实现方式和大佬的一样;第一次登录的时候,会返回给前端token和refreshToken,当token过期,会返回status为418,前端拿到418之后,知道token过期,然后会拿着refreshToken去调用刷新接口,刷新接口判断如果refreshToken没有过期,那么会重新生成token和refreshToken返回给前端,否则返回419;然后前端拿到419会认为此时是登录过期,将用户到登录页面重新登录。这个就是解决了token续期问题。这样逻辑没有什么问题吧大佬", 2725 | "..", 2726 | "这么大的安全隐患,怎么保证refreshToken是安全的,是不是只要是人调用就返回token,那还用什么token?", 2727 | "不安全,如果refreshtoken被获取,就可以永久获得可用的token。这个refreshtoken就相当于一个永久密码,你改密码都无法限制。还不如直接用密码", 2728 | "使用传统session,保存的用户信息一般到多少的时候会使服务器内存不够?就是有没有标准?怎么看保存的用户信息占的资源,自己也没法模拟几十万用户登录,难道我手动保存几十万条数据到session中吗?保存的用户信息一般是一个对象然后转json字符串存,或者直接存sessionid,好像几十万个sessionid并占不了多少,我是新手,就是问一下。[看]", 2729 | "嗯,接下来的问题就是后端的事情了,jwt如何主动过期,如何同一用户同一时间只能一个有效,一个登录就要踢掉其他的,如何登出时作废所有该用户颁发的token。", 2730 | "滚动条过半了才看到正文,这又不是写论文。建议把没用的引子删了,可以加点自己的思考", 2731 | "这里好像写反了[思考]", 2732 | "还是不明白 refreshToken 和 accessToken 的协调原理,refreshToken过期时间为多久?refreshToken也会有被拦截的可能,它被拦截了,是不是也会影响accessToken的安全?", 2733 | "昨天周末和老公逛公园,老公买了个风筝,放着风筝他不由地感叹道:“都说婚姻就像放风筝,我就是你手里的风筝,不管飞得多高,线始终握在你的手里...”\n我听了不禁一阵得意,刚想开口夸他,就听他喊:“快看风筝跟别人的风筝缠在一起了...”\n我潇洒的放开了手中的风筝线,任风筝在空中零碎,老公看我如此洒脱,很纳闷 :“老婆...你怎么说放就放啊???”\n我 :“一次不忠,终身不用!!!”", 2734 | "那如果session保存到redis里,不放到内存中呢?", 2735 | "不错不错", 2736 | "禁止拖动事件冒泡应该就可以了吧", 2737 | "标题党", 2738 | "图标和官网太丑了,感觉不如deno", 2739 | "太少拉兄弟,多出点啊,几百个框架够谁学啊?最起码得出几百万个框架啊。全他妈抄抄改改。有屌用", 2740 | "只有我觉得卡颂像是金三角那边的名字吗?[不失礼貌的微笑]", 2741 | "看一个东西好不好,看社区活不活跃就知道了,并不是看他简介吹自己多牛逼", 2742 | "官网都没有多语言中文,统一只能在梦里做", 2743 | "厉害👍", 2744 | "不支持html和css.意味着就是个半成品,vue项目是没法用了", 2745 | "有点意思,在以前的 layui 项目中试了下,但是没发现有什么特别的亮点", 2746 | "有点期待", 2747 | "新轮子诞生记", 2748 | "那些轮子哥为什么不用汇编写工具[奸笑]", 2749 | "这不是统一,这是又新出轮子。", 2750 | "欸,看到中间后有点感伤,今年上半年写的最多的就是这样一个表格,功能一摸一样。\n平台太小,导致没啥知名度,下半年10月,被工作四年的公司开除。\n酸肯定不会酸的,进不了大厂自己能力不够,更加努力吧,没其他途径。", 2751 | "没意义", 2752 | "666,实用hooks技巧", 2753 | "整一个npm包更爽[呲牙],独乐乐不如众乐乐[呲牙][赞][赞][赞][爱心][爱心][爱心][玫瑰][玫瑰][玫瑰]", 2754 | "[赞]文章不错可以转载不,会注明作者和来源,感谢", 2755 | "6[听歌]", 2756 | "学到了[力量]", 2757 | "学到了 摸鱼时间大增[吃瓜群众]", 2758 | "学习一下", 2759 | "大佬 没看到useList返回对象,组件使用怎么解构出来的啊", 2760 | "似曾相识的赶脚", 2761 | "好文,mark[抱拳]", 2762 | "Sketch设计图识别用的是什么方案?", 2763 | "好文,mark[憨笑]", 2764 | "晚上试试", 2765 | "更多的是借鉴solidjs才对吧", 2766 | "实际上参考的并不是vue而是solidjs, signal确实是比react那个state简单易懂多了。\n我觉得preact团队现在就是不知道自己的方向了,跟随react去做concurrent到最后他这个react替代品包体量肯定也小不了,特别是react18之后,只能找找别的出路了,solid给了一个方向,往后再看吧。", 2767 | "没看懂那个batch主要作用是啥?就是为了少刷新?好像没啥用", 2768 | "嘴里说的是preact,心里却装着react和vue,这是代码海王吗?", 2769 | "图是真的多[白眼的狗]", 2770 | "学到了学到了", 2771 | "niubility", 2772 | "整挺好的,不过没啥必要", 2773 | "555", 2774 | "nb", 2775 | "如果这种情况会自动在async2中插入tryCatch吧,那么async3内的catch就永远进不了是吧", 2776 | "有个插件叫`await-to-js`,挺好用的", 2777 | "可以借鉴一下发表其他平台嘛?会标记原文章出处的~", 2778 | "插件不得是一个类吗", 2779 | "后期如果能加入catch 后的处理函数体就好了,这样里面就可以收集到需要的埋点数据了", 2780 | "[发呆]", 2781 | "插个眼", 2782 | "嵌套promise 就拦不了了", 2783 | "不行, 你这个网站太卡", 2784 | "世界杯决赛在英国举行,法国VS克罗地亚。。。", 2785 | "他卡住了[发呆]", 2786 | "真不错,吹一波cool~", 2787 | "能将它接入自己的项目,博主很牛逼。向大佬学习[强][强]", 2788 | "ChatGPT 惊艳的AI应用平台", 2789 | "这玩意动不动就 network err", 2790 | "有点卡", 2791 | "大佬牛逼", 2792 | "知道为什么假日那么短暂么???因为假日没有上午...\n知道为什么开学后那么漫长么???因为它不仅有上午还有早上。。。", 2793 | "open ai 服务不太稳哈,有时候可能有点问题", 2794 | "cool~不过前端的交互可以优化下,输入框input事件貌似就触发提交了", 2795 | "今天试试", 2796 | "可以请教一个如何使用babel吗 像修饰器这种提案", 2797 | "多tabs 怎么搞的 怎么去记录已经打开的页面", 2798 | "哇哦,前端大佬", 2799 | "antd太重了", 2800 | "你的多tabs 怎么实现的", 2801 | "没看懂此文讲了antd5的哪些改进和优点。", 2802 | "思路打开了", 2803 | "兼容性如何?", 2804 | "用css作 思路很不错,就是实际项目没啥用", 2805 | "我有个问题,无论是节流的方式还是loading的方式还有一个作用是避免重复请求,一般是在请求结束后loading才取消或是节流才执行下一次请求。css动画的方式时间是预设写死的,请求的响应时间是根据当时浏览器的运行状态和网络状态实时影响的,那在css动画实现节流之后是不是仍然还要在请求另封装重复请求的处理", 2806 | "我虽然看不懂,但我大受震撼", 2807 | "分享", 2808 | "很棒哦,有个小问题提一下\n应该是button:active{ animation: throttle 2s step-end forwards; }吧\n我看你写的button {animation: throttle 2s step-end forwards;}", 2809 | "这个方便啊!", 2810 | "思路针不戳", 2811 | "很棒", 2812 | "挺好的,用了。", 2813 | "可以的[赞]", 2814 | "有意思[赞]", 2815 | "原来还可以这样", 2816 | "确实不会影响逻辑,也确实用不到。也确实没用,不过还是感谢作者分享哈。我只是说代码没用不是说人。", 2817 | "666花生你发现了盲点", 2818 | "MicroFrountend 应该写错了,MicroFrontend", 2819 | "[嘿哈]", 2820 | "牛啊牛啊", 2821 | "2222", 2822 | "开出地图,直接在空中飞起来", 2823 | "在公路外面开了一会", 2824 | "JS无敌", 2825 | "隔壁有个后端说他看了两小时文档就能写出来,国外小帅居然用16个月,辣鸡差评[看][看][看][看]", 2826 | "我看成外卖小哥", 2827 | "倒着开 可以开到草坪上", 2828 | "...为什么有音乐,", 2829 | "文章咋样我不知道 我是来看小帅小美的。。。", 2830 | "可以[赞]", 2831 | "老6太6了", 2832 | "下一步是不是可以考虑实现一个网页版的狂野飙车", 2833 | "真强", 2834 | "真的强", 2835 | "车容易打滑,可以优化下吗,没其他的,摸鱼用得着[看]", 2836 | "vite/client.d.ts", 2837 | "从二月可以看出是北方的朋友。", 2838 | "好家伙,好歹先把多页面的bug解决再发广告啊", 2839 | "这是恰饭对吧[灵光一现]", 2840 | "如果 try run 失败之后还是要手动处理失败的对吧,那你觉得在什么场景下执行函数,会在第一次失败然而第二次执行就成功了?面向概率编程么", 2841 | "这不是golang风格的error handling吗真心不如try{}catch,await 语句也是可以直接加上.catch来处理的", 2842 | "66666666[v5]", 2843 | "[尬笑]先放到收藏夹吃灰了——如不好用,回头再收拾你[尴尬]", 2844 | "66666666666", 2845 | "害的是你", 2846 | "感谢支持", 2847 | "昨晚儿子问老公:“爸爸,为什么你有那么多白头发???” \n老公:“因为你不乖,所以爸爸有好多白头发呀...” \n儿子疑惑了一会儿:“......那为什么爷爷全部都是白头发???”", 2848 | "先收藏在看", 2849 | "点赞+收藏", 2850 | "期待弄一期”Monorepo 方案及最佳实践“🔥🔥🔥", 2851 | "很清爽,好看。 点击文档切换的时候,有没有感觉有 500ms 文档空白,然后突然刷出来。 是不是加个骨架屏或者loading效果好一点", 2852 | "赞,一直在用", 2853 | "这是干嘛的,看完了,不清不楚的。。。。", 2854 | "写的太烂了,不知道是干嘛用的", 2855 | "收藏一下", 2856 | "有什么关系吗", 2857 | "感觉都很基础啊", 2858 | "你是懂起标题的", 2859 | "这里面的功能我好想基本都做过", 2860 | "如何判断图片即将进入可视区域,这个都不需要这么写吧用这个Intersection Observer", 2861 | "这是最近的百度面试题?", 2862 | "这都是比较正常的八股了吧,三年的没压力😬", 2863 | "这面试题,八股中的老年人。。。", 2864 | "回文字符串的题用双指针的话可能时间复杂度会更低一些,可以试试哈", 2865 | "Cache-Control的时间单位应该是s而不是ms吧?", 2866 | "全局px转vw可以使用postCss工具实现,混入还是麻烦了点", 2867 | "人行阳德,人自报之。人行阴德,鬼神报之。人行阳恶,人自报之。人行阴恶,鬼神害之。——孙思邈·《千金方》", 2868 | "又学习了新的面试题", 2869 | "面试的时候手写driver.js的实现吗?", 2870 | "软考,docker, go ,我也都把他们立成过flag,最后都没有做成,你做到了,给你点赞[赞]", 2871 | "哦", 2872 | "口言之,身必行之。《墨子·四十八章·公孟》", 2873 | "你们这些大佬,怎么语文也学得这么好[撇嘴]", 2874 | "再来看一遍🫡", 2875 | "以前总觉得在地铁上刷短视频是浪费时间的事,为什么不学习呢,现在我也是整天刷[捂脸]", 2876 | "可以摘录展望嘛[抱拳]", 2877 | "冲他爹的", 2878 | "🤙🤙🤙", 2879 | "不错🤙", 2880 | "😆真全面", 2881 | "早前用uniapp时就发现了这个风格, 感觉比try-catch优雅多, 我自己也手动写了的类似的包装器.", 2882 | "已投票支持", 2883 | "爱过😂", 2884 | "苟住", 2885 | "FinClip 更适合有想法的大佬", 2886 | "Unisdk😄😄", 2887 | "mpass还是可以的,我司的都换成这个了", 2888 | "啊~微信爸爸也开放了[吃瓜群众]", 2889 | "可能还不能代替程序员,但是能代替码农", 2890 | "有谁看懂了那个笑话", 2891 | "RxJS 用途还是很广的,事件驱动系统、响应式表单、异步操作、竞态处理等等", 2892 | "这是抄的wendell大佬的吧?https://redi.wendell.fun/", 2893 | "依赖注入实现为什么不采用inversifyjs", 2894 | "我在公司的项目用injection-js,把vue的router,axios都包装了一层弄的像angular一样,搞来搞去最后还是向公司人推荐angular,写angular才是最好的[吃瓜群众]", 2895 | "看完一脸懵,是我太菜了😩", 2896 | "为了解决一个小问题,引入一堆概念。依赖注入本来就是第三方的状态管理成立的基石,为什么要强调?这就像做了一道麻婆豆腐,强调里面有辣椒一样。", 2897 | "https://juejin.cn/post/7039252967374979103 可以看看vue3中oop编程范式", 2898 | "github上这个是你写的么?https://redi.wendell.fun/", 2899 | "可开源参考嘛", 2900 | "还觉还是很难控制依赖的组合和影响的范围。", 2901 | "一说讲思路我赶紧认真看,往下一翻全是代码。。。。。", 2902 | "w-[720px]是什么语法呀,好高级", 2903 | "RootRenderFuncion 少了个t", 2904 | "render函数渲染的组件,如何也继承main中createApp后use的插件?例如ElementUI,pinia等,等一个大佬来回答[呲牙],困扰我很久了", 2905 | "很棒噢", 2906 | "学到了~", 2907 | "还是rails的ActiveRecord yyds啊", 2908 | "gorm不好用吗?[思考]", 2909 | "然而sql 才是基本, 简单查询还好说, 复杂查询不可信任这类构造器的生成与优化", 2910 | "看了使用说明,有orm的部分\n要不然查询出来的结果就是未知的", 2911 | "DB::table()->where()->get()这是查询构造器,并不是ORM。看你的写法应该是Laravel里的吧?Eloquent ORM那一章里的内容才是ORM。所以你推荐的这个GO的库只是实现了稍微好用点的查询构造器,ORM还没呢。", 2912 | "我说呢linux的qq怎么无了,,前几天看到消息说是腾讯用electron开发qq了,原来真事啊,估计顺便把linux的也做了", 2913 | "好东西,收藏!", 2914 | "异步请求数据状态管理库可以参考vue query,react query官方出品,react技术栈里有 ahooks的userequest,swr,react query,vue中也有类似实现", 2915 | "又可以面向掘金编程课,真的好喜欢!", 2916 | "请问下setup 上面加 name 是用了什么插件吗?我在官方文档没找到这个", 2917 | "👍 例子详细易懂。\n我也写了个和作者差不多的请求hook封装成库,方便业务使用封装📦,真的很方便,可以look look。\nhttps://inhiblab-core.gitee.io/docs/hooks/useRequest", 2918 | "看的有些吃力,看来我的水平还是很low", 2919 | "没有微信生态又有什么用呢", 2920 | "真厉害", 2921 | "@客服,移动端为什么有bug啊🤔", 2922 | "还得兼容docker,革不了docker的命。", 2923 | "技术在进步", 2924 | "没啥革命性的功能,真的是没动力换啊", 2925 | "我还是选择docker", 2926 | "用人家的镜像不用工具意义何在?", 2927 | "centos 8不是停止开发和维护了。。。。", 2928 | "[奸笑]centos都停止维护了", 2929 | "Podman 有类似 docker-compose 的工具吗?", 2930 | "CentOS 8 要 end of life 了。。。你还能还要再升级升级", 2931 | "大佬牛", 2932 | "可是P站一直无法注册", 2933 | "我来了哈", 2934 | "好文推荐~", 2935 | "支持,大佬加油[奋斗]", 2936 | "好文[赞]", 2937 | "刚才我和女儿玩妈妈和宝宝的游戏,我当女儿,她当妈妈,出了楼道我觉得很好玩,叫她妈妈,她左右看了看,非常严肃:“你别叫了,让别人听见,还以为我真是你妈!!!”", 2938 | "给大佬打call!", 2939 | "用爱发电很不容易,尤其还是8年", 2940 | "好文,收藏了[666]", 2941 | "优势是什么?我反而觉得可读性不如标签,灵活性不如jsx", 2942 | "这种没啥意义的", 2943 | "我之前尝试过,但是个人玩玩还行,团队中,会给同事造成麻烦。不太建议。语义化不够强。", 2944 | "如果自己团队内部都感觉能接受的话,可以使用。就像stylus vue刚开始不也推荐使用么,后来也不用了,pug最开始叫jade,后来改名叫pug,如果层级多了,接手起来确实很恶心,个人不建议使用[灵光一现]", 2945 | "好累, 如果遇到这种项目的代码又要增加学习成本,以前的前端 都只用写 html css jq 好多单词顺手拈来,现在我 一个document.getelementbyId 都要快捷提词器 不然还会敲错。。怎么才能做到熟到信手拈来,天天在更新!!!", 2946 | "好难用[流泪][流泪][流泪],被折磨过", 2947 | "卧槽,还可以将pug放在vue3中, react应该也可以。", 2948 | "真的没有什么卵用,非常反人类,既不好看也不好读,纯属自己找虐,要是实在喜欢就当我没说", 2949 | "用这个的只是为了标新立异吧。真的会更方便吗", 2950 | "这玩意都多久了,还新。而且这种写法,弊端一大堆", 2951 | "感觉没啥用,只是换了一种写法而已。并没有实际的解决什么问题", 2952 | "曾经我也推行过pug,因为写法看起来简洁且优雅。后来render函数改变了我,pug对render函数写法是不友好的,对于我这种组件狂魔来说简直就是痛苦。顺便回答一下评论区其他兄弟的评论,不存在“维护成本高,只有自己可以维护”,因为有一个工具叫pug转html[不失礼貌的微笑]", 2953 | "当年叫jade的时候就在用了,不推荐", 2954 | "全新?这玩意可一点不新吧", 2955 | "严格的锁进,对于形成好的代码习惯非常有帮助,难点还是对于维护以及问题排查方面,毕竟这个已经相对脱离了HTML的规范标准了,有一定的学习成本。", 2956 | "我是不是也能创造一种语法", 2957 | "目前我司就是使用的pug,没啥特别的感觉,评论区说的什么缩进啊之类的问题。。没感受出来,对我来讲只是实现代码的一种方式。", 2958 | "终于找到不失业的秘诀之一了。", 2959 | "这个终端主题win能装吗", 2960 | "vscode太强了,我用goland[衰]", 2961 | "vscode太强了,我用webstrom[看][黑脸][黑脸][黑脸]", 2962 | "国内云厂商的便宜应用服务器有什么推荐的,一直想这么玩", 2963 | "多语言多环境插件手动关闭吗?", 2964 | "慎终如始,则无败事。《老子♦德经♦六十四章》", 2965 | "它的命令行我都不用,就别说别的了。", 2966 | "那对接硬件咋办[捂脸]", 2967 | "专业的事情,交给专业的工具", 2968 | "专业的事情交给专业的人", 2969 | "应该测试一下,不打开控制台的状态 会更有说服力", 2970 | "不打开控制台 console.log 应该是不会造成内存泄露\n这篇文章用 performace api 在不打开控制台的情况下做了个测试\nhttps://javascript.plainenglish.io/can-console-log-cause-memory-leaks-how-to-make-a-browser-crash-with-console-log-b94e4d248ed8", 2971 | "很有用,进收藏夹吃灰吧", 2972 | "我偏不,我就用log", 2973 | "chrome这么弱智?", 2974 | "生产环境直接删除log[看]", 2975 | "你不开控制台就不会打印。。", 2976 | "知道 log 不能上生产,但是线上问题有时候需要通过 log 的信息来定位,是不得已之举", 2977 | "上线的代码,打包时把console.log去掉就好了吧。文章很详细,收获不少。", 2978 | "强强i强", 2979 | "dropconsole[强]", 2980 | "控制台不开是不是就没有这个问题?", 2981 | "不打开开发者工具应该不会吧", 2982 | "就说有没有专门教性能问题定位的课程", 2983 | "tql", 2984 | "没写完嘛", 2985 | "[beforeRedirect 加快了地址栏的更新速度]没有看懂.", 2986 | "父页面和iframe页面不同域名,怎么获取iframe中的元素或者拦截到iframe中的url跳转???", 2987 | "但是你会微前端跳槽可以多要点工资[得意]", 2988 | "评论区都在说改造微前端耗时间[绝望的凝视],一天就搞定了", 2989 | "iframe又不是啥丢人的技术,关键他稳啊,不会给你搞太多坑", 2990 | "iframe那就上wujie了", 2991 | "非常结合实际场景的好文~", 2992 | "确实是这样,80%以上的场景iframe足够了。没有必要为了微前端而微前端", 2993 | "怎么解决资源重复加载问题", 2994 | "对于B端一些比较老的项目来说,用iframe作为微前端真的是非常实用的。到底用iframe还是用类似qiankun这样的\"高大上框架\",都是根据业务需求来的,改造成本才是业务关心的点。", 2995 | "(为了不让别人觉得自己实现用的不是高大上的技术 而费尽心思,鄙视链这么凶吗)", 2996 | "😂", 2997 | "想问下大佬 “Monorepo” 特性预计什么时候会支持呢", 2998 | "市面上已经有很多文档工具了,为什么你们还要再做一个。dumi2和其他的工具差异点在哪里,dumi2能实现的,其他工具是不是也能实现", 2999 | "本来打算升级dumi2,但是过程折磨然后放弃了。\n① 我自己的文档示例样式的less驼峰写法,在设置css-loader配置`exportLocalsConvention: \"camelCase\"`后,示例代码样式倒是有了,但是整个文档的样式都丢了[泣不成声]。\n② API那块文档写的真不够详细,entryFile入口文件地址的意思是我所有API都要在那里导出?另外就是设置entryFile入口文件和文档示例的位置不在同个文件目录下的时候,示例代码文件都无法再被识别到了\n当然我不知道是不是我使用的姿势不对,最后还是非常开心能看到dumi 2[庆祝]", 3000 | "刚用dumi1搭完了一套组件库,还有father-build,请问这个升级点除了皮肤有其他优势吗?", 3001 | "支持,GitHub已经star。准备在小项目上试试手", 3002 | "挺好的 可惜不支持装饰器", 3003 | "Please use @electron/osx-sign moving forward. Be aware the API is slightly different, 已经弃用了, 是否考虑更新?", 3004 | "项目很不错!\n之前用的是这个https://github.com/electron-vite/electron-vite-vue,请问可以简单对比一下吗[吃瓜群众]", 3005 | "打胡乱说", 3006 | "博眼球", 3007 | "如果把会技术当做硬实力,那么提升自身就是软实力。硬实力能在一个阶段让你受益,软实力能让你一生收益。所以我们可以把软实力当做我们之后要提升的方向。我认为这些是软实力:\n1.表达能力。\n2.沟通能力。\n3.学会看到问题的本质原因,提升自身的分析问题、解决问题能力。\n4.调整自身心态,明白自己在工作中、与人交往中、生活中自身位置在哪里。\n这些软实力,离不开自身一复一日的学习,打磨。\n表达能力的锻炼可以尝试看书,看完书之后写作总结,或者当故事讲给别人听;沟通能力主要是在日常中学习,学习身边好的人的沟通方式,如果身边人没有好的沟通方式,那就看书。沟通愉快的本质是沟通对象都互相尊重对方;第三点还是离不开总结看书,经验的累积,不断的分析问题,不断的总结、反思自身问题,解决问题能力自然而然就会水到渠成的提高;还有很多软实力的提升,比如提高文学素养,提高历史功底等等,我只是列举了一部分。我特别喜欢这几句话,分享给你们:\n1.人无远虑,必有近忧。\n2.正己而不求于人,则无怨。上不怨天,下不尤人。\n3.行远必自迩,登高必自卑。\n4.以责人之心责己,以恕己之心恕人。\n5.以铜为镜,可以正衣冠;以史为镜,可以知兴替;以人为镜,可以明得失。\n暂且就分享到这啦。", 3008 | "我33岁,在深圳做IT外包,目前在研究出国做IT的道路,为我今后20年做打算", 3009 | "单纯制造焦虑。\n驻场开发大多外包,且是不稳定的外包。\n诚然,35岁是个槛,对任何工作都是,不仅是研发。\n只会质疑,没有提出解决思路。", 3010 | "乌拉", 3011 | "能写出解决客户问题的技术方案,能把客户讲晕拉到项目,懂招待客户,能运用身边所有资源把项目做好,这就是技术专家... 就算他不会敲代码,他也是很牛的人。 这是我回老家这两年的感悟,技术算个屁... 有项目才牛", 3012 | "小公司当韭菜被割傻了。", 3013 | "人总得有一技之长,滑头的可以跑市场,心静的搞技术。再说社会是一个大平台,需要各类人才协调完成,比如市场跑下来的项目需要搞技术的研发;贩卖焦虑还不如继续深耕自己擅长的领域。", 3014 | "要牛逼,就要综合能力,但是也要有自己的专长", 3015 | "这篇文章,很能震撼到技术人员的心,颠覆了我当初学习技术的初心(热爱)。给把兴趣当做工作的人一记现实打击。\n他确实很现实的指出问题,技术人做到35被更年轻更便宜更效率的人替代是毋庸置疑。\n同时也指出了解决方案:做得5~7年差不多该转管理方面做人情世故,才能得到所谓\"年薪\",而不是固定月薪。\n不过各位也各有高见,人越长大越难保持初心,保持状态,人各有志,尊重所有的看法。", 3016 | "技术人员也要有产品思维,不然就只是个工具人,会被卷死的", 3017 | "制造焦虑,自己的工作没做好,效率又低,工资又高,按你的理论程序员平均年龄就是 35 岁,没人可以活过 35 的", 3018 | "感谢分享,学习了[抱拳]", 3019 | "制造焦虑和感悟最大的区别就是:制造焦虑只说问题,感悟会给出解决方案", 3020 | "技术这个东西重要也不重要得分情况,但是既然选择了这份职业,那么还是需要保持不间断的学习的, 不然就因为觉得不重要就摆烂吗? 其他的人脉什么的只能看缘分。", 3021 | "受益匪浅", 3022 | "查重率100%", 3023 | "建议可以在路由切换时监听js资源如果加载失败了,再请求json文件判断是否有更新", 3024 | "用pwa不能解决这个问题吗?简单方便。", 3025 | "轮询吧嗯。。下下策吧", 3026 | "用户不刷新页面 hash 怎么会变化。。。?", 3027 | "json我感觉就挺简单的,只需要生成json文件,之后每次打包肯定都是最新,不需要后期修改配置了吧,根据json的配置刷新页面就行,这样配置性挺强的,后续还有其他需求通过配置文件也可以满足", 3028 | "好棒", 3029 | "能解决微信缓存问题吗[哭笑]", 3030 | "在打包的时候,通过nodejs/fs 读写个静态js文件添加:给window增加个全局变量=时间戳的js脚本。主文件第一次加载将时间戳存储本地;写个定时器不断加载js文件,对比时间戳与本地存储的时间不等就提示。只考虑用户正在使用的时候给发版提示,用的sesstion存储就足够。 前端的实现,思路都差不多。就看发版标记在哪里打", 3031 | "按照作者的代码试了一下,为何我重新打包后替换的资源,轮询后newScript依然是旧的hash值啊", 3032 | "好久", 3033 | "我用的方式和那个用etag方式有点类似又不完全是,我用的是cookie方式,我本地有一个配置文件,文件中有version属性,后端根据前端的调用,判断版本号是否和后端相同,如果不相同直接返回异常状态码,前端在拦截中编写对应更新逻辑[捂脸]", 3034 | "在用react+lazy 的时候遇到了相似的问题,最终的解决方案是,加了个中间件在请求资源失败时,重新请求3次,如果全失败则会抛出错误会被错误边界捕捉到,然后提示用户进行刷新", 3035 | "没太理解业务场景,我们分包做按需加载配合nginx做协议缓存方案 不就会触发页面更新么", 3036 | "感觉还是和后端配合一下会有更好的方案吧?有大厂的人出来讲讲吗", 3037 | "给红包,爱刷不刷,刷,送100红包", 3038 | "使用new Set去重然后对比length思路很棒啊", 3039 | "这种项目太多了,就看到最后谁入局最深", 3040 | "群众里面有坏人", 3041 | "其实大家都知道骗人的,但当你实实在在看到他们是赚到钱的时候,你就会心动,进去了后运气好的话你赚了钱,没有跑,还想再赚点的时候,就有可能老板跑路了,到头来你也亏了,不管啥骗局前期为了骗更多人可能是真的有点甜头,后面你没跑或看别人赚了再进来接盘的就酸爽了", 3042 | "在web2免费的东西,在web3不可能发展得起来", 3043 | "讲了个div", 3044 | "所以财富密码到底是什么,没技术,没商业模式,讲情怀?", 3045 | "笑死了", 3046 | "https://segmentfault.com/ 以前的广告就是这样, 花钱买其中的几格", 3047 | "如果真有人买,那还真是离谱,不过我觉得肯定大部分都是假的数据,鱼塘里全是鱼钩就等一条大鱼", 3048 | "项目链接有吗,想康康", 3049 | "这个网站一看就是抄袭的百万格子,后者出现几十年了", 3050 | "元宇宙还要用div", 3051 | "出码按钮在哪里,想看看,阿里那个只能生成类组件", 3052 | "这也 太卡了吧,随便拖动几个组件就卡死.....", 3053 | "强不强的另说,真心建议你们找公司ui设计一下。(关闭按钮展示成这样是 ui 看到会直接暴毙的程度)", 3054 | "虽说我知道你们只是在造轮子卷个KPI, 但是未免造的也过于粗糙了, 整个功能不全(比如数据排序过滤)的表格就推出来了\n有三点问题:\n相比隔壁阿里的那个低代码引擎你这个的优势是什么? 在M端的业务迭代中能提高多少人效? 团队用了多少人力去做这件事, 不用这个提高的人效可不可以通过招个外包来解决?", 3055 | "真卡", 3056 | "自己革自己的命是吧?", 3057 | "好丑的界面", 3058 | "开发了多个低代码项目,也见过很多项目了。没见过真正超过手写代码的,无论是速度还是实用程度", 3059 | "官网是谁做的? 换一个前端来开发吧,太卡了。", 3060 | "点2下就卡死了,拜拜了您嘞", 3061 | "又产垃圾", 3062 | "最基础的排序、过滤都不支持。 表格的拖拽排序、 多表头更遥遥无期啦。 这个不看好。", 3063 | "点击子表直接卡死了", 3064 | "支持批量编辑不,B 端用户其实对批量编辑需求还是很强烈的", 3065 | "就是个lese,就随便进去点了一下直接卡死了....[吐彩虹]", 3066 | "个人体会:\n一定一定一定要跟产品\\客户说明,低代码不代表100%自由度,依然得遵循这套规则去使用,而不是说:”不是低代码吗?“,”不是灵活性高吗?“”怎么这不行那不行“", 3067 | "KPI项目", 3068 | "低代码这东西 只有大到一定程度才有用。中小公司搞这个 死的更快", 3069 | "去看一下响应头里的这个信息,来个定时器请求网站根目录,简单比对一下就行了", 3070 | "其实禁止html缓存就行了", 3071 | "用户不刷新页面的情况下,入口文件中的script不还是原来的吗", 3072 | "你的静态资源已经是hash路径了,为什么不增量发布呢?增量发布,既能利用长时间的缓存机制,也能避免文件被覆盖。", 3073 | "有些不太明白,从html中去拿hash值,html不会有缓存吗?", 3074 | "我是在路由切换时请求JSON文件,判断是否更新。JSON中的版本号可以修改打包配置时根据当前时间自动生成", 3075 | "第一种方法监听json文件变化,那json文件有缓存还能监听到变化吗", 3076 | "直接给他发消息,让他刷新可以不", 3077 | "现在都是非覆盖式发布,包括后端接口也要尽可能向前兼容,根本就不存在这类问题", 3078 | "把打包的js拼接一下时间戳,也是不错选择", 3079 | "pwa就行了", 3080 | "直接告诉客户,ctrl+F5强制刷新,还没有就多刷新几次,实在不行清缓存。一套组合拳下来就好了", 3081 | "掘友, yyds", 3082 | "真需要吗?你们的问题是,用户在老版本上,你们发了版本别人就没法使用。应该解决这个问题,就可以了呀。[微笑]", 3083 | "需要通知吗", 3084 | "感觉还是用渐进式更新会好一点,代码用版本号区分,保留最新版本及上一个版本;用户不刷新就使用旧版本,刷新后更新,这个配合运维去实现;现在这样操作,如果用户正在操作刷新就会导致用户操作丢失", 3085 | "如果用户正在操作,填数据表格你在更新用户体验很不好,想想怎么实现无感刷新,保持现在页面的状态数据不动,然后刷新[灵光一现]", 3086 | "哪位大佬帮忙找找刚上线的项目BUG,有福利哦!复制链接 到微信中打开 https://wechat.mx37.com/activitys/fissionh5/?shareId=oTC4ut3Li71zvk-CvvHlkm4bzbgE", 3087 | "https://juejin.cn/post/7166134868215070733 还能打包自动更新版本号哦", 3088 | "京东有套 NutUI vue3 的 给 Taro 用。\n\n不过源码我前阵子看的时候 TypeScript 类型检查通不过 Linter 校验通不过 单元测试 通不过。\n\n不过我自己写的小程序用了,确实能运行。[捂脸][捂脸][捂脸]", 3089 | "就vant那性能 算了吧", 3090 | "挺好[憨笑]", 3091 | "uview", 3092 | "最经常用的就是vant了[捂脸]", 3093 | "有一说一,除了weui其他的都看不上眼", 3094 | "我用的ColorUI组件库,里面的图标简直方便的不能再方便了", 3095 | "很棒,但是为什么没有FirstUI组件库呢[坏笑]\n推荐大佬看看,蛮好的。120+款组件,丰富精美专业,支持vue3", 3096 | "TDesign 腾讯设计团队官方出品\nhttps://tdesign.tencent.com/miniprogram/overview", 3097 | "感谢", 3098 | "组件比较全面,建议多几种样式风格,这种重阴影的看起来很难接受,比较喜欢vant 那种小清新风格", 3099 | "收藏了,万一以后用到", 3100 | "微信群二维码失效了。", 3101 | "看到VUE的优秀组件库我反手就是一个赞", 3102 | "终于多一个优秀的选择", 3103 | "哈哈哈哈", 3104 | "个人学习成本低,团队学习成本高。如果能把团队的规范设为pug,那也是一件很爽的事", 3105 | "开发一时爽,维护火葬场", 3106 | "吃饱了撑的", 3107 | "从来不看好Pug(jade),这玩意除了少写点字,没啥优点,果真在后端用,还不如使用 Mozilla 的 nunjucks 。", 3108 | "比JSX强在哪。。。完全不是一个类型的。它应该跟template比,但是跟template差远了。\npug现在的用武之地应该是服务端,express nest里面,代替html渲染页面。", 3109 | "值的学习", 3110 | "思路有点像是函数式编程", 3111 | "这个思想上还是属于插件化开发", 3112 | "标题都写错了是ant design,不是ant deisgn[灵光一现]", 3113 | "element-ui里面用的是popperjs,感觉和这个差不多", 3114 | "期待作者源码分析", 3115 | "https://github.com/ant-design/ant-design-mobile 中用的就是 floating-ui", 3116 | "我是做低代码BI平台的.这个方案的问题主要集中在放大缩小会导致字体,图片模糊等很要命的问题.这种大屏诉求有个特点一般就是大屏设备的宽高是可确定的或者可指定的,让客户在做的时候选中指定适配的基准分辨率,我们提供裁剪线让客户感知到越界的可能性,在编辑阶段就主动规避,使用时裁剪多余部分.如果适配不上也只是客户调整下目标大屏分辨率即可.", 3117 | "客户屏幕 24 :9 ,产品在他4:3的屏幕上看效果。。。", 3118 | "我们要16:9 32:9 同时有,[尴尬]", 3119 | "学习了,不错", 3120 | "额。。。你永远都想象不到用户的屏幕到底有多宽[快哭了]", 3121 | "有没有考虑缩放兼容问题", 3122 | "学习!", 3123 | "重点是文字你怎么缩小", 3124 | "flex 布局 vh vw+fontsize使用rem。", 3125 | "为什么当前屏幕比例>设计稿比例时,要做高度比判断呢?", 3126 | "用这个方案好像30:9适配不了16:9[看]", 3127 | "主要是地图和鼠标事件有问题,还有精确定位也不行,除非手动根据比例计算", 3128 | "还是觉得rem好一点,而且有转换单位工具很方便", 3129 | "为了文章而写怎样", 3130 | "单纯为了写文章而硬写", 3131 | "看起来还不错,写官网能用吗", 3132 | "总感觉怪怪的,用 scale 的话比例必须一致,不然可能铺不满下面空一部分。感觉还是布局用 flex + 百分比,文字用 rem 好点", 3133 | "scale有弊端,如果是一些含有地图交互的大屏,或者类似节点关系图交互的大屏,会出现点击点位置计算错误问题。", 3134 | "onresize的话,有些浏览器兼容不太好,用户f11全屏不生效,最后还是用addEventListener('resize'),addEventListener('fullscreenchange')都写了才行", 3135 | "好多样式可以用自定义变量能够减少一些重复性代码", 3136 | "厉害[赞],音波那个可以优化一下,除了背景颜色都是一样的动画", 3137 | "可以 可以", 3138 | "写得挺好", 3139 | "收藏===学会[害羞]", 3140 | "牛逼 牛逼", 3141 | "确实可以", 3142 | "收藏[白眼的狗]", 3143 | "太牛逼了啊[害羞]", 3144 | "[给力][给力][给力][给力][给力][给力]", 3145 | "好强👍 学习了 收藏起来", 3146 | "[赞][赞][赞][赞][赞][赞][赞][赞][赞]", 3147 | "过年还更,牛逼", 3148 | "好耶", 3149 | "走查的时候,我这个边距是16,你这边是多少怎么不对,然后你等我算一下", 3150 | "实际应用\n :root{\n font-size: 0.875em;\n }\n\n这个0.875em 具体是多少px呢? 没看到相对的px值", 3151 | "*", 3152 | "可如果这样的话就不能计算出1rem 实际是多少px了,还是要借助js获取屏幕宽度去设置,因为这件事安卓和iOS那边没少找我 要我去写一下rem ->px", 3153 | "设计走查的时候十张嘴都解释不来[泣不成声]", 3154 | "『〖【龍图腾2023♞华夏铭文♞吴儆♞《吴儆诗集》】〗』", 3155 | "在ipad中,vh就会有问题", 3156 | "字体用rem,其他用vw一般就差不多了", 3157 | "如果你用了一些第三方的ui的话还需要更多的处理", 3158 | "个人倾向于标明最大最小值和使用变量\n\n```css\n:root {\n\n\n --min-font-size: 12px;\n --max-font-size: 24px;\n --base-font-size: 2vw;\n --font-size: min(max(var(--base-font-size), var(--min-font-size)), var(--max-font-size));\n // 或者\n --font-size: clamp(var(--min-font-size), var(--base-font-size), var(--max-font-size));\n font-size: var(--font-size);\n}\n\n```", 3159 | "这个有没有相关实现教程", 3160 | "做成内衣展示,项目一定会很火", 3161 | "不错偶", 3162 | "这个用来做展示非常不错", 3163 | "识别一下衣服样式,然后去淘宝搜索出相关的商品连接,推荐给用户[呲牙]", 3164 | "这个有意思", 3165 | "three.js的案例网站是什么", 3166 | "衣服都有了,那不搞一个捏人物模型的", 3167 | "可以搞[奸笑]", 3168 | "牛呀", 3169 | "来个衣服设计系统[灵光一现]", 3170 | "应该再加点框架图!页面逻辑框架、系统结构框架等、即需要操作层面的(用户体验),也需要技术层面的(程序设计)!!![西瓜]", 3171 | "真服了 谁干掉谁? 真会说啊", 3172 | "大过年就开始标题式引战是吧", 3173 | "放了个屁:噗", 3174 | "干掉前端框架的可能是一个后端语言,webpack,vite,nodejs都是基于js的,这东西最大的毛病是相互引用资源太多太多,迟早有一天会被后端语言比如go给干掉,所有前端工具都用go做的,开发编译速度都杠杠的,但愿有生之年能看到。到时候记得给这条评论点赞。", 3175 | "React已经在慢慢被淘汰了", 3176 | "不要标题党,", 3177 | "运筹帷幄之中,制胜於无形。《司马迁♞2023年在沙特吃手抓饼》", 3178 | "合理", 3179 | "说了又好像没说", 3180 | "框架会淘汰,但是街头炒饭不会", 3181 | "不晓得[不失礼貌的微笑]", 3182 | "vue", 3183 | "angular才是最终归宿", 3184 | "这也能上热度啊", 3185 | "爱谁谁,反正我纯原生手撸", 3186 | "爱谁谁,反正我用jq。", 3187 | "掘金以后能不能少推荐点这玩意", 3188 | "今年七八月份就工作了,vue和react的项目自己都做过几个,后端会node,不知道该做什么样的项目去写简历", 3189 | "为什么不打游戏啊[看]", 3190 | "面试那套复习资料能甩个GitHub吗", 3191 | "收藏了,我也分享一个", 3192 | "哇哇哇", 3193 | "单身狗的时间表", 3194 | "gorm一直在用!", 3195 | "佬", 3196 | "iconfont可以自己创建项目,图标class名完全可以自定义的。后期哪怕项目改版,更换图标也是一键替换的事情。可维护性可比你一个个svg强太多了", 3197 | "难道没有人用字节跳动的iconpark吗?我感觉iconfont乱糟糟的,不喜欢。", 3198 | "uniapp很多情况不支持svg[流泪]", 3199 | "\"说到 icon,很多前端开发只能想到 iconfont\" 想知道这个比例究竟有多少,都2023了不至于吧", 3200 | "想请教一下,为什么变成json了,就可以做到按需引入了呢", 3201 | "有心了[灵光一现]", 3202 | "给我的感觉,确实有亮点但是综合体验iconfont永远的什", 3203 | "[666]", 3204 | "工具越多越累", 3205 | "文章列举了一些字体图标的缺点,但是感觉不是很硬的缺点,就是只在特定条件发生或者对整个性能来说影响占比小。目前使用图标的痛点:1、各业务系统都会有自己独立的图标,因为组件库自带的很难满足,也不可能满足;2、设计师并不了解字体图标,使用的工具 Sketch、XD 甚至 PS 都有,设计出来的字体图标往往质量不高,不注意大小一致性,命名等问题。不过有一点儿我是赞成的,多端可以使用一套字体应该是正确的方向,希望所有组件库也都朝着这个方向发展,目前我们移动端和PC端组件库都还没有统一或者说没有引导往这个方向走。", 3206 | "做工程化的化直接用nodejs把svg生成为一个个vue或者react组件不就好了吗?既能按需引入,代码也能有提示", 3207 | "对工程化和开发体验友好,就是自动化程度还需要iconfont直接支持的最好", 3208 | "说了半天不还是svg", 3209 | "进去入收藏库", 3210 | "我更喜欢配合Reactivity Transform,全部使用$ref,放弃使用reactive,但是不确定有没有bug。", 3211 | ">这样能保证最小值,也不至于屏幕大了字号过大,做了一个较好的适配\n\n为什么说 calc 避免了屏幕字号过大?字号不还是没有最大限制吗?", 3212 | "你是懂标题的", 3213 | "?掘金咋也有这种文了?", 3214 | "就这个标题就值得一个举报", 3215 | "我一般设置html在375宽度时的font-size为100px 超过640宽度就当做375的宽度来,这样pc端也就不会出现大字体了, body的font-size为10px 然后内部元素的字体就都为1px=0.01rem", 3216 | "请你去UC报道", 3217 | "我还以为新东西[呲牙]", 3218 | "标题党,好几年前的方案", 3219 | "2017年就是这么搞的了吧[吃瓜群众][吃瓜群众][吃瓜群众]", 3220 | "好文", 3221 | "最新文档:https://maomincoding.gitee.io/strve-doc", 3222 | "strve跟UI库怎么结合使用,文档里没有写", 3223 | "针不戳", 3224 | "先给好评,样式审美高级,读完文档感觉很容易上手,只是本文示例里有个小bug想提一下,如果在onTextValue里置空textValueDom的value的话,文本框失去焦点以后里面内容就没有了,所以还是放在send里面清空会好一点", 3225 | "34,厉害", 3226 | "北京买房,首付都不止300w了吧,看来大佬的fire值不低啊", 3227 | "能够供得起房子,也是比较优秀的,加油", 3228 | "这两年购房是不是有些仓促", 3229 | "早日离开浪浪山!", 3230 | "确实难受", 3231 | "FIRE思想的确是个很好的思想。", 3232 | "貌言华,至言实,苦言药,甘言疾。《司马迁♞2023年在英国坐公交》", 3233 | "不让自己成为他人的上限,这个就很难得[赞]", 3234 | "看来我还早", 3235 | "昨天在家里youtube上看到FIRE运动,一起加油早点退休。", 3236 | "大佬怎么加群啊,进去混个脸熟学习一下[可怜]", 3237 | "标记清除:是根据对象的可达性判断是否是垃圾数据的", 3238 | "[惊讶][惊讶][惊讶]", 3239 | "卷死我得了", 3240 | "2年就问这些了,卷上天了", 3241 | "这些60%我不背的话都答不上来,我要价20+k[发呆]", 3242 | "真卷啊!!!回家炒粉了", 3243 | "请问现在前端就业好找工作吗", 3244 | "这么吓人的吗....我都不敢出去面了", 3245 | "emmm工作经验马上快一年了,看到v8垃圾回收,然后去找这个的说明解释看蒙了", 3246 | "卷又不卷,不卷又有点卷。\n反正我7年,现在让我回答这些,只能勉强及格。", 3247 | "一直以来都有个疑问,他们面试官使劲问各种底层真的有用吗?尤其那种做简单应用的公司,他们真的需要到底层调优甚至复写底层吗[发呆]", 3248 | "学java的看懂了一些", 3249 | "大家一般在哪投的反馈比较多点,boss?一年工作不到建议投哪个平台", 3250 | "写前端要知道这么多吗?", 3251 | "我也是2年,巧了巧了", 3252 | "太卷了[流泪]同找工作的我很担心", 3253 | "现在都是面试造航母了", 3254 | "弱弱的问下,不会这些影响我复制粘贴吗?", 3255 | "关于BFC有些历史背景可以讲讲。\n\n在最早的html时代,p标签是有默认的上下边距的,当两个p标签上下展示时,会出现上下距离小,中间大的问题,所以html时代自动重叠了相邻两个p标签的接触边距。也就是我们常说的边距塌陷。在css引入时,因为要兼容这个场景,所以css设置边距时,也遵从了边距塌陷的特性。\n\n后来页面要求有了新需求,需要隔离布局对外界的影响。所以到了css2.1时代,才引入了BFC概念。\n\n然后可以介绍一下哪些场景需要使用BFC,再说一下有哪些方法可以创建BFC。\n\n这应该会是BFC或者是CSS方面的加分点\n\n没有详细整理文案,语言有些啰嗦,请见谅。", 3256 | "这个图标库怎么样 https://fontawesome.com", 3257 | "单纯支持下", 3258 | "写的不错!", 3259 | "写的确实比较详细,挺不错的", 3260 | "只有我关心目录消失的第五点吗?", 3261 | "字太多,描述的太复杂,看不懂,谁能总结一下", 3262 | "[白眼]不应该是vite和webpack吗。。vue就一个负责读地址", 3263 | "require静态资源也需要单独写一篇博文?", 3264 | "在这里能学的东西太多了,我脑容量已经告急了[骷髅]", 3265 | "话说我都不知道", 3266 | "[拥抱]", 3267 | "如果我引用public里面静态图片就是直接 src=\"绝对路径\" 这样才无问题,动态图片需要import/require进来保证解析后的路径和dist包同步", 3268 | "其实如果真的有小伙伴跟着问题三中的操作进行验证,估计就要开喷了。所以为什么要这样写呢?是要转写手了么?", 3269 | "纯干货,喜欢。用大白话,把一个问题讲透,舒服。", 3270 | "标题震惊,require或者import 和vue没有关系。这是由构建工具支持的模块化规范决定的,这些资源都会被相应的构建工具loader处理得到最终产物。要说区别,那就是import可以利用静态语法较好的支持treeshaking。", 3271 | "细致", 3272 | "看了大佬的文章真是豁然开朗,之前遇到的引入资源问题遇到的bug也有了解释[呲牙],感谢大佬[赞]", 3273 | "涨知识了[呲牙]", 3274 | "收藏了!!", 3275 | "还是比较可靠的", 3276 | "我甚至都没有意识到,还可以配置?", 3277 | "[白眼的狗]", 3278 | "首先点个赞,工作中不一定用到这么多,可以先收藏,需要可以翻出来看看", 3279 | "665", 3280 | "慢慢你就会发现,折腾的尽头是默认", 3281 | "[看]我就喜欢花里胡哨的东西,炫酷的一批", 3282 | "码住", 3283 | "大佬", 3284 | "youqu", 3285 | "😓我就没固定插件,换个电脑,随便安装几个插件就好了", 3286 | "你小子整的太干了", 3287 | "你小子,收藏了", 3288 | "因为他不服", 3289 | "别人不知道 反正我是收钱来的", 3290 | "cra的确已经落后了", 3291 | "回报太小了", 3292 | "竞对+1", 3293 | "因为是竞品😂", 3294 | "现有项目迁移成本太大,不然真想试试", 3295 | "vite打包不识别require..对于一些库来说会有巨大bug", 3296 | "vite 还有很多 bug 没修复。上次就遇到了https://github.com/vitejs/vite/issues/3033,这 bug 都 tm 快两年了。", 3297 | "dan 的意思是:最理想的应该是 S级 方案,cra 和 vite 都只是 A级,A级再怎么改也是 A级(当然,S级目前也没计划,只是理想状态),未来 cra 可以成为一个方案选择入口,用户自由选择不同方案,S级、有vite的、cra现在的...\n\n我的评价是,还不如给一个文档列出所有方案,何必多你这个命令行入口...", 3298 | "因为 vite 是竞品团队出的[吐舌]", 3299 | "可以详细讲一讲electron-updater的增量更新部分的实现吗[可怜]", 3300 | "好像还有个框架,忘了是啥,应该比electron好吧", 3301 | "刚好项目要接electron, 正好拿来参考", 3302 | "好文,前段时间也调研了下,不过由于项目调整没有深入研究", 3303 | "渲染进程XSS,强悍,想了解一下具体情况", 3304 | "学习到了1", 3305 | "看了这个库的源码,目前还是太简陋了,而且如果遇到复杂业务场景,为了保持响应式,可能要写一大堆垃圾代码,最后还不如接着用setState来的简单", 3306 | "[赞]好文呀,掘金要是都是这种高质量就好了。", 3307 | "好文章", 3308 | "问下 嵌入的问卷星 在编辑完成问卷的时候 iframe跳转会直接把 外部的地址给覆盖掉 ,就像是打开了一个新的链接,这个问题怎么解决", 3309 | "学习", 3310 | "作者你好,我使用iframe,出现了'每次刷新页面就会增加内存,且内存不会下降'有遇到过类似的情况吗?不知道为何我的应用内存占用率很高", 3311 | "作者你好,看完后感觉文章让我受益匪浅,但是我还存有一个疑问:生意贷本身的其他页面的,这个iframe只是嵌套了一个页面吗。", 3312 | "你怎么如此优秀", 3313 | "请问iframe中的返回兼容怎么处理呢,比如iOS部分机型返回会触发外层back,也可能会触发重载,这是我项目中遇到的问题,暂时没有解决方案", 3314 | "自己干掉自己?", 3315 | "我有个问题一直搞不定,iframe里嵌的老系统用cookie,现在的谷歌浏览器不让跨域set-cookie导致老系统一直登录不上,设置samesite:None和secure都不行。", 3316 | "用iframe的原因难道不是因为缺人?", 3317 | "看到这篇文章重要知道阿里的技术为什么走下坡路了", 3318 | "你这个子系统的遮罩没有盖住菜单吧,弹框过程中还是能点击菜单跳转的,这个iframe有解决办法吗", 3319 | "微前端通信方式:直接通信,这里的直接通信具体是指什么?", 3320 | "无界用起来挺不错的\n还提供iframe的兼容方案", 3321 | "从头开始微前端,改造老项目iframe,结束", 3322 | "做过类似的需求,但是没法改B系统的代码,只能轮询查找iframe里面的location.href来更新地址栏,很蛋疼[捂脸]", 3323 | "不错不错。", 3324 | "隐藏子系统的layout那点可以详细点吗。子系统layout那部分antd只有hide侧边栏 但是侧边栏还是会有图标缩略侧边栏以及layout头部部分,怎么让子页面只有content部分呢", 3325 | "你这弹窗的mask没有管侧边栏么", 3326 | "postmessage 通信方式传递数据受限制太大,在一个完全可以iframe和微前端(qiankun) 兼容方式逐步推进", 3327 | "excite", 3328 | "可以维护一套内部的UI组件库,放在cdn上引用", 3329 | "典型的为了替换而替换,iconfont用起来没有任何毛病", 3330 | "尤雨溪咋这么牛逼啊", 3331 | "前端慢慢变成后端[发怒],学个锤子", 3332 | "各种降为打击, 多年来对普通开发者只会陷入无尽的循环 .", 3333 | "前端最终会发展成后端", 3334 | "vue SSR搞半天一直各种报错,公司大佬一会就搞好了,郁闷", 3335 | "感觉用过或者考虑过大半,还有好多可以学一学,现在这个前后端类型整合方案还是觉得麻烦。", 3336 | "我提供", 3337 | "感觉前端发展的方向越来越奇怪", 3338 | "学不动了累死了,再干几年就转行", 3339 | "不用新的工资涨不了,不管好不好用,用新的就完事了", 3340 | "学不动了,你更任你更,我用react16.8[无辜呆][无辜呆][无辜呆][黑脸]", 3341 | "一下子又焦虑了[流泪]", 3342 | "如果不是去年刚离职就封控在家,我也不会学习那么多,现在最起码,这篇文章能看得懂了,哎", 3343 | "await to js 挺好使,但是老板写的try-run-js属实不知道是干啥的,也没看明白", 3344 | "我们项目中是自己封装了useRequest,我觉得你可以出一个基于axios或者fetch的请求hooks,一般项目中,常见的异步基本都是请求类的", 3345 | "再折腾,奶茶就要被喝光了", 3346 | "可以试试 quickJS ,等一篇 quickJS 物联网的文章", 3347 | "我要的时工位不是物联网[流汗]", 3348 | "在大概率要跑路的工位一直没敢跑路[流泪]", 3349 | "666, 我以为奶茶品牌的前端团队就是做做下单的小程序,或者内部的一些erp系统,没想到是我肤浅了。", 3350 | "你们居然在做这么牛逼的事情,还是一个奶茶公司吗?", 3351 | "学习了,所以树莓派在哪儿领🤔️", 3352 | "6翻了", 3353 | "难蚌", 3354 | "和楼主差不多,antd开发后被要求用公司复制的那套elm,回退到2.7 不过大多数代码还是不用改", 3355 | "[吃瓜群众]vue2升vue3是为了啥?kpi吗", 3356 | "为啥", 3357 | "如果舍得的话 其实可以用vue-demi来对组件库进行2、3的适配", 3358 | "elementui都好多坑,之前lock依赖没了,拉去后是新的,然后表格显示不了了,所以以后能不升就不升[哭笑]", 3359 | "vue-router 的语法和版本,这个不是啥问题,vue-router已经在vue2中提供了hook,可以直接使用,关于eslint,直接使用anfu大佬的规则,美滋滋。详情看这个https://juejin.cn/post/7197222865833869368\n[呲牙]", 3360 | "早有这么多问题当初为什么要用3开发呢,新项目开始之前就没搞清楚", 3361 | "所以要提前做好调研,选择合适的版本开发,不像我们用jQuery开发,根本不用考虑这些问题[吃瓜群众]", 3362 | "前端在内卷升级技术, 而市场现在饱和的只招3年以上", 3363 | "[看]所以我压根就不升3。2的用户基数非常大,3就是叫的热闹,其实用的人不是特别多", 3364 | "“团队中的开发人员可能需要花费大量时间来学习 Vue 3 的新功能”如果把这条列入降级的依据,我觉得不配做前端[奸笑],当然除非哪个人一直用vue2做到65岁退休", 3365 | "果然 出现了", 3366 | "魔幻的世界 这种工作终于来了", 3367 | "原来使用的是v2,又为什么要写v3,现在又要降级,当初为啥会考虑升级,多此一举", 3368 | "下班晚了。正在写。。。。[捂脸]", 3369 | "不试一下Bit: https://bit.dev??", 3370 | "文档可以和组件源码放一起", 3371 | "大佬,你的项目为啥build:lib会失败呀\n报错:拷贝组件components的ts类型文件失败!", 3372 | "大佬,可以上传gituhb吗,参考一下", 3373 | "hah", 3374 | "跟到脚手架那里就断了,目录没写出来,不知道cli是要写在packages/ui里,还以为是一个单独的package,有点吃力", 3375 | "可以考虑出个配套视频🥺🥺", 3376 | "githup 还是github", 3377 | "不知道楼主会不会在打包的时候加入打包体积分析方法,现在使用rollup-plugin-visualizer的话,只会显示你打包的最后一个组件的信息;不能为每个组件都生成?请问有什么办法吗?", 3378 | "[坏笑]", 3379 | "这是我见过的组件库搭建文章中最详细的,诚意满满,太赞了,支持[赞]", 3380 | "配置ESlint的时候, 它pnpm提示是否确定安装在根目录, 要的话再次输入pnpm i eslint -D -w, 请问这样做可以吗, and 执行npx eslint --init的时候,Which framework does your project use, 选择none吗, 谢谢😂", 3381 | "正在跟着走一遍 还是比较吃力的 对我这半吊子来说 可能还是不够详细,只能照着package.json 里面的抄,\n想问这文章还有后续吗", 3382 | "有考虑出个react版本么?", 3383 | "非常不错,可以讲讲 精灵图片移动、添加边框,根据按钮缩放、旋转、删除的实现", 3384 | "来点成果展示吧[呲牙]", 3385 | "根据本文,我做了个拖动排序数组的例子,\nhttps://code.juejin.cn/pen/7179447002013368335", 3386 | "好的框架,在使用的时候是无感的,更加接近原生。不要搞那么多花里胡哨的语法糖,vue3的新的语法带来了很大的心智负担。", 3387 | "option API不香吗?为什么非要用compose API?没发现用compose API胡满篇的变量,为了像react而使用compose API,为了hook而compose API,累不累啊", 3388 | "语法糖多了会反受其害", 3389 | "前端不要搞太多简写了,乱用会导致代码根本无法阅读。就一个扩展运算符到处都是,搞得字段乱七八糟。各种语法糖,各种风格,并不是好事", 3390 | "掘金的字体这么小了么,这大小。。。是要和小程序的编辑器看齐么[傲慢]看得难受", 3391 | "废弃就废弃吧,反正现在前端现在也卷", 3392 | "reactive 解构丢失响应式?", 3393 | "这种宏方式真的不行 失去了组合式api 初衷 逻辑自由组合 只能在vue文件里使用 早就该取消了", 3394 | "学习了,前端不就是挖坑、填坑、被挖坑、填坑、给别人挖坑、填坑的过程吗!", 3395 | "出了就感觉行不通,根本分不清楚", 3396 | "我感觉现在的框架,对于开发人员来说,都有一种反直觉的存在。", 3397 | "没有.value的话怎么区分普通变量和响应式变量呢,依赖代码高亮吗?", 3398 | "赶紧废弃\n吧", 3399 | "各位巨佬好,我作为一个前端小鸟如今也能大概看懂一点相关文章了[呲牙]", 3400 | "有些爱[微笑]未开始已经结束", 3401 | "我还没有听说就废弃了", 3402 | "我觉得把ref也废弃得了,只保留一个reactive", 3403 | "前排再次提示,放到这里了,https://vue-macros.sxzz.moe/features/reactivity-transform.html,大家可放心使用 $ref", 3404 | "就因为喷子几句话,尤大就白折腾了一年,心疼尤大一秒", 3405 | "有人跟我解释下为什么要.value,当初为什么这样设计的", 3406 | "大佬能说一下,iframe的上下拖动布局具体实现思路吗?[晕]", 3407 | "大佬有交流群吗", 3408 | "不错,可以持续迭一下[灵光一现]", 3409 | "那设计稿的手绘感,咋搞的。", 3410 | "不建议用iframe,另外,低代码的核心难点是容器,容器可以无限嵌套", 3411 | "还是没懂为什么要 iframe?", 3412 | "简单的还可以,复杂的难搞哦,我们团队自己也在搞这样组件库,用起来感觉好难受啊", 3413 | "表单这块目前看还是 formily 做的最好,高性能、灵活、框架无关,缺点是上手成本高。xrender 作为与 antd强绑定的实现,如果你也使用antd,并且不需要复杂的联动和切换框架,倒是可以考虑", 3414 | "同级元素为什么用对象而不用数组表示,对象在很多时候是按照首字母排序的,很不方便", 3415 | "有没有推荐Vue3的表单快速开发工具?[流泪]", 3416 | "和formily的区别是什么", 3417 | "很棒, 期待升级后的fr-generator", 3418 | "3. ChatRender...基于 @ant-design/chatrs\n有 2 处 typo 错误哦😂", 3419 | "大佬666", 3420 | "不懂就问\n2是意味着node有内置的常用加密和散列算法了?6是不是意味着内置watch可以替代nodemon了", 3421 | "你知道的太多了,", 3422 | "nodejs不是web服务器吗?框架express koa2都不升级了,它还整天升级为了啥?不懂就问", 3423 | "第一个", 3424 | "大佬,地面图片不出来,是有啥地方不对吗?", 3425 | "工地转前端的优势一下就体现出来了。", 3426 | "兄弟们,指点一下,这个错怎么解决vue3里面,试了一些方法不行", 3427 | "想请教一下,在建造地面,墙面时,这些position信息是怎么计算出来的呢?需要自己算数学公式么?坐标系是依赖哪个呢?谢谢", 3428 | "我的世界js版吗[黑脸]", 3429 | "太牛了我要拜你为师", 3430 | "一直想学three,一直没开始", 3431 | "先收藏,后阅读", 3432 | "卧槽,头晕了", 3433 | "threejs这方面工作多吗\n哪些公司有岗位呀", 3434 | "好,你的元宇宙初版上线了,开始融资圈钱!", 3435 | "《我用前端技术搬砖》", 3436 | "[思考][思考][思考][强][强][强]", 3437 | "其实真正抬高threejs webgl 前端学习成本的是模型和贴图资源,可以多搜搜或者官网拿来用用,但是实际项目的模型质量水平还是坎坷的,3dmax、玛雅的学习成本和工作量不小,性能上要注意网页上的模型面数奴要超过10万,性能还是受到影响的", 3438 | "出发点不敢苟同,但作者确是个有荣誉感的人", 3439 | "我觉得还不错,至少看完有收获[呲牙]", 3440 | "期望是你对技术的专业意见,没想到还是这种所谓的软实力,失望", 3441 | "结果:能用就行", 3442 | "卷吧卷吧 无心恋战 准备退休了", 3443 | "币事真多", 3444 | "写过有点技术/思维深度文章的人都知道。\n掘金不过是一个娱乐圈罢了\n这里最吸引人的不是简单业务就是娱乐性技术新闻。\n一旦涉及到深度思考或者尖锐话题,瞬间化身某浪微博一样的地方。喷子群起。", 3445 | "总结得挺好的", 3446 | "待过两家大厂,对这些都免疫了,想退休[斜眼]", 3447 | "good", 3448 | "他都叫自己学长了,就不能让着他吗", 3449 | "不知道国外的普通前端有没有这么累,做个普通人真特么难", 3450 | "前端娱乐圈不是说说而已", 3451 | "强者恒强,弱者总在抱怨。", 3452 | "蚂蚁的p7的话,对技术的广度会有硬性要求吗?比如前端,p7会要求对一门后端语言、数据库等有着比较深的认知吗。还是说在前端的某一个领域(如富文本、图形学)深耕到一定程度即可。", 3453 | "看了一下评论 事实证明掘金还是不是发这种文章的 hhhhh", 3454 | "对比了一下我一年不到的经验,目前就是P5的状态,也有了点p6的感觉.总结刨根问底这一块欠缺好多[流泪]", 3455 | "以前公司的老板跟我们说 蚂蚁鹅厂也就那样 你们努努力就行了 以后开发者大会上就有你们的身影 我直接笑死 工资死低 要求又多 下班了还不让走 让你留下来看书", 3456 | "P6: 应该是基本各种技术都能hold住,广度,深度都有。P7:有更好的语言组织能力,写ppt或者汇报工作,能够提供给上面信息,去做决策,向下能帮助组内成长,更好的完成工作。" 3457 | ] 3458 | } 3459 | } --------------------------------------------------------------------------------