博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一个前端小白的成长之路 前端系列---项目搭建
阅读量:7021 次
发布时间:2019-06-28

本文共 5791 字,大约阅读时间需要 19 分钟。

? 项目地址:

?开始游戏:

前言

这篇主要讲讲改造脚手架的思路

起手式

这里我用的 creat-react-app 创建项目

关于脚手架素质三连和一些脚手架的配置参数各位看官就可以自行
只是按我以前的尿性就直接 eject,最近朋友推荐用

yarn add react–app–rewired ––devtouch config-overridess.js复制代码

这里暂时覆盖几个项目常会用的,等后面写项目或者项目优化需要再配置

开启代码压缩

config.plugins.push(    new CompressionPlugin({      filename: '[path].gz[query]',      algorithm: 'gzip',      test: /\.(js|html|css|jsx)$/,      threshold: 10240,      minRatio: 0.8    })  )复制代码

环境变量

实际开发中,肯定有多套环境,dev/test/pro 做一些预制

config.plugins.push(    new webpack.DefinePlugin({      ...envConf    })  )复制代码

的配置如下

const dev_env = {  'process.env.NODE_ENV': JSON.stringify('development')}const test_env = {  'process.env.NODE_ENV': JSON.stringify('test')}const pro_env = {  'process.env.NODE_ENV': JSON.stringify('production')}module.exports = process.env.DEV ? dev_env : process.env.TEST ? test_env : pro_env复制代码

这里需要别的自定义环境变量也是可以的, 值得一提的是,这里的值需要 stringify 给到

命令行中设置变量推荐

"scripts": {    ...    "build": "react-app-rewired build",    "build:test": "cross-env TEST=true npm run build",    ...  },复制代码

打包文件分析

打包文件分析也有蛮多插件这里推荐

if (process.env.ANALYZE) {    config.plugins.push(new BundleAnalyzerPlugin())  }复制代码
"analyze": "cross-env ANALYZE=true npm run build"复制代码

执行 analyze 的效果

后期做代码优化,可以考虑把体积大的依赖通过 cdn 引入,通常情况下 react 和 react-dom 还有一些 UI 框架的包会比较大,这里后期专门开代码优化专题再细讲了

持续集成

这个各公司应该都有相应的构建流程,我司目前通过 jenkins 构建 docker 镜像,rancher 进行容器发布和升级,相对来说简单方便

笔者本来打算用 docker 方式构建,但是服务器是用的阿里云的 ECS,装 docker 环境有点问题,索性放弃了,等有时间再慢慢搞
参考的操作改造了一个简单的发布过程

  1. 登录
const promptList = [{    type: 'username',    message: 'Please enter your server account:',    name: 'username',    default: server.username  }, {    type: 'password',    message: 'Please enter the server password:',    name: 'password'  }];  inquirer.prompt(promptList).then(answers => {    return {      host: server.host,      port: server.port,      username: answers.username,      password: answers.password    }  })复制代码

因为会在不同电脑开发,采用键入账户方式, 用于连接服务器,也可以采用私钥的形式

  1. 重启服务
const spinner = ora(`Publishing to server in progress...\n`)  const Client = require('ssh2').Client  const conn = new Client()  scpClient.scp(    './nginx.conf', {      ...serverConf,      path: `${server.nginxPath}/conf/nginx.conf`    },    err => {      if (err) {        console.log(chalk.red('\nReplace nginx.conf failed.\n'))        throw err      } else {        console.log(chalk.green(`\nReplace nginx.conf success! \n`))        conn          .on('ready', () => {            conn.exec(`rm -rf ${server.staticPath}\ncd ${server.nginxPath}/sbin \n./nginx -s reload`, (err, stream) => {              if (err) throw err              console.log(chalk.green(`reload nginx success! \n`))              stream                .on('close', (code, signal) => {                  spinner.start()                  if (updateFile) updateFile(serverConf, (err) => spinner.stop())                  conn.end()                })                .on('data', data => {                  console.log(`STDOUT: ${data}`)                })                .stderr.on('data', data => {                  console.log(`STDERR: ${data}`)                })            })          })          .connect({            ...serverConf          })      }    }  )复制代码

开发过程中,有可能会修改 nginx 配置,这里直接采用开发目录下进行替换,并重启 nginx,随便科普一下 nginx 一些常用到的配置

...    gzip on;    // 开启gzip,前提是要打包出对应gz文件    server {        listen       80;        server_name  localhost;	    rewrite ^(.*)$  https://$host$1 permanent; // http重定向到https	    ....	  }    server {        listen       443 ssl;        server_name  ${your domain};        ssl_certificate      ~.crt;        ssl_certificate_key  ~.key;         // ssl证书路径        location /games/ {                  // 资源代理            alias  /app/html/games/;            index  index.html index.htm;        }    }...复制代码

这里值得一说的是如果你的项目不是直接根路径访问的,那打包出文件引用路径就需要插入对应的路径,对于creat脚手架只需在中配置,

{  ...  "homepage": "${your domain}/games/"  ...}复制代码

或者eject后直接修改config/webpack.config.prod.js中publicPath

  1. 上传打包文件
scpClient.scp(    './build', {      ...serverConf,      path: server.staticPath    },    err => {      if (err) {        console.log(chalk.red('deploy failed.\n'))        throw err      } else {        console.log(chalk.green(`deploy success! Successfully released to production! \n`))      }      if (cb) cb(err)    }  )复制代码

语法检查/代码美化

作为宇宙第三ide的vs,这些插件当然是基本操作啦!

根据需要在 设置rules,需要保存时格式化代码,可以在 设置

"editor.formatOnSave": true,   // 保存是自动格式化  "prettier.semi": false,        // 句尾分号  "prettier.singleQuote": true,   // 单引号  "prettier.printWidth": 120,   // 单行展示最长代码量  "files.exclude": {        // 考虑设备性能,忽略一些不需要关注的文件    "/node_modules": true,    "/build": true  },复制代码

至此,我们一个项目功能就搭建完了,你可以把它保存成模板,甚至构建出自己的脚手架传到npm上,参考

one more thing

秉承着不装逼会死原则,总结出猿圈三大装逼指南

git commit emoji

我们看看,骚!

这里贴一些常用的emoji,全文可参见

emoji 代码 说明
? (庆祝) :tada: 初次提交
? (书签) :bookmark: 发行/版本标签
? (bug) :bug: 修复 bug
? (急救车) :ambulance: 重要补丁
? (口红) :lipstick: 更新 UI 和样式文件
⚡️ (闪电)
? (赛马)
:zap:
:racehorse:
提升性能
? (火箭) :rocket: 部署功能
? (锤子) :hammer: 重大重构
? (调色板) :art: 改进代码结构/代码格式
? (火焰) :fire: 移除代码或文件
✏️ (铅笔) :pencil2: 修复 typo
? (工人) :construction_worker: 添加 CI 构建系统
console ASCII Art

实例:

_____                            / ____|                          | |  __  __ _ _ __ ___   ___  ___ | | |_ |/ _` | '_ ` _ \ / _ \/ __|| |__| | (_| | | | | | |  __/\__ \ \_____|\__,_|_| |_| |_|\___||___/                                  复制代码

我相信你再各种命令行工具看到类似的操作吧!

当然作为前端,我们常用的当然是console.log,看看这里又有什么骚操作

百度:

console毕竟不属于js标准,主要是宿主环境的实现,我们喜爱的chrome和微信开发工具是支持控制台自定义样式的,ie/edge和node环境均不支持
上例

console.log("%c 百度2019校园招聘简历提交 %c http://dwz.cn/XpoFdepe %c (你将有机会直接获得面试资格)", "color:red","","color:red")复制代码

除%c外,还支持一下占位符,具体就不一一展示了,大家可以自己玩玩

占位符 描述
%c 样式
o%,O% 对象
i%,d% 整数
f% 浮点

知乎:

这里安利几款在线生成字符画的工具

README shields

这些徽标分别来自:

  • 持续集成服务
  • 测试代码覆盖率
  • 代码质量管理
  • 纯用来生成自定义徽标
  • 项目社交聊天服务
    这些项目目前都是开源的,并且可付费支持私有项目,当然徽标不是越多越好,主要反应你项目情况就行了!

骚年,看你骨骼清奇,这三部装逼秘籍,就送你了

占位符

转载地址:http://dscxl.baihongyu.com/

你可能感兴趣的文章
SELECT 查询中的谓词与 CASE 表达式
查看>>
调整 tempdb 文件大小
查看>>
Linux 定时计划任务
查看>>
C#中的异常处理
查看>>
实习日志(三)
查看>>
前端知识体系及修炼攻略
查看>>
XML相关概念和操作
查看>>
防止nodejs进程出错时退出
查看>>
动画-CAShapeLayer实现QQ消息红点拖拽效果
查看>>
Apache配置文件详解
查看>>
Linux命令:自动添加用戶
查看>>
我的友情链接
查看>>
Skype for Business后端服务器部署AlwaysOn可用性组实战篇
查看>>
快速理解什么是APT
查看>>
关于error LNK20xx的链接错误
查看>>
【物联网智能网关-08】TinyGUI和WPF汉字显示技术比较
查看>>
linux学习日志
查看>>
Linux 常用命令
查看>>
jquery如何操作cookie
查看>>
手机号校验
查看>>