Vue webpack 介紹 翻譯

懵逼馆衔,竟然沒(méi)有中文版。自己對(duì)英文不敏感怨绣,看一遍記錄下來(lái)角溃,備用。

介紹

這個(gè)模板是針對(duì)大型應(yīng)用篮撑,默認(rèn)你已經(jīng)熟悉Webpackvue-loader减细。確定已經(jīng)讀過(guò)vue-loader文檔去面對(duì)一般的工作流程。

快速開(kāi)始

為了使用這個(gè)模板赢笨,需要使用vue-cli腳手架未蝌。推薦使用npm3+

$ npm install -g vue-cli
$ vue init webpack my-project
$ cd my-project
$ npm install
$ npm run dev

項(xiàng)目結(jié)構(gòu)

.
├── build/                      # webpack config files(webpack配置文件)
│   └── ...
├── config/
│   ├── index.js                # main project config(主要配置文件)
│   └── ...
├── src/
│   ├── main.js                 # app entry file(入口)
│   ├── App.vue                 # main app component(組件入口)
│   ├── components/             # ui components
│   │   └── ...
│   └── assets/                 # module assets (processed by webpack)(需要預(yù)處理的靜態(tài)資源)
│       └── ...
├── static/                     # pure static assets (directly copied)(純靜態(tài)資源)
├── test/(測(cè)試先不看了)
│   └── unit/                   # unit tests
│   │   ├── specs/              # test spec files
│   │   ├── eslintrc            # config file for eslint with extra settings only for unit tests
│   │   ├── index.js            # test build entry file
│   │   ├── jest.conf.js        # Config file when using Jest for unit tests
│   │   └── karma.conf.js       # test runner config file when using Karma for unit tests
│   │   ├── setup.js            # file that runs before Jest runs your unit tests
│   └── e2e/                    # e2e tests
│   │   ├── specs/              # test spec files
│   │   ├── custom-assertions/  # custom assertions for e2e tests
│   │   ├── runner.js           # test runner script
│   │   └── nightwatch.conf.js  # test runner config file
├── .babelrc                    # babel config(es6適配)
├── .editorconfig               # indentation, spaces/tabs and similar settings for your editor
├── .eslintrc.js                # eslint config
├── .eslintignore               # eslint ignore rules
├── .gitignore                  # sensible defaults for gitignore
├── .postcssrc.js               # postcss config
├── index.html                  # index.html template
├── package.json                # build scripts and dependencies
└── README.md                   # Default README file

build/
這個(gè)目錄包含生產(chǎn)和開(kāi)發(fā)環(huán)境下的webpack構(gòu)建配置驮吱。通常情況下你不需要接觸這些文件,除非你想自定義webpack構(gòu)建萧吠。在這種情況下左冬,你需要去瀏覽build/webpack.base.conf.js
config/index.js
這個(gè)是一個(gè)暴露了在在build過(guò)程中大部分配置選項(xiàng)的配置文件。See API Proxying During Development and Integrating with Backend Framework for more details.
src/
項(xiàng)目代碼目錄纸型。如果使用了Vuex可以參考recommendations for Vuex applications.
static/
不需要預(yù)處理的靜態(tài)資源文件
See Handling Static Assets for more details.
test/unit
測(cè)試文件
See Unit Testing for more details.
test/e2e
e2e測(cè)試文件
See End-to-end Testing for more details.
index.html
這個(gè)單頁(yè)面模板拇砰。在開(kāi)發(fā)和構(gòu)建中。webpack 最后生成的資源的都在注入到這個(gè)模板狰腌。生成最后的html
package.json
包含依賴(lài)的npm包文件和build指令

Build 指令

所有執(zhí)行都是NPM腳本執(zhí)行
npm run dev
開(kāi)啟node.js本地服務(wù)器

  • 單頁(yè)面組件需要的webpack + vue-loader
  • 熱加載(修改文件除破,無(wú)需重啟服務(wù)器)
  • 編譯覆蓋
  • ESlint
  • 原文件映射
    npm run build
    為生產(chǎn)構(gòu)建資源文件
  • js壓縮( UglifyJS v3.)
  • html壓縮html-minifier.
  • 所有組件中的css文件被提取到一個(gè)文件中,壓縮cssnano.
  • 為了長(zhǎng)期緩存素有的靜態(tài)資源都被編譯帶有版本哈希琼腔。生產(chǎn)模式下的index.html會(huì)自動(dòng)生成url為這些資源
    npm run unit
    利用Jest在JSDOM中進(jìn)行單元測(cè)試
  • 支持es6
  • 容易mocking
    npm run e2e
    利用nightWatch進(jìn)行e2e測(cè)試瑰枫。
  • 在多個(gè)瀏覽器進(jìn)行并行測(cè)試
  • 開(kāi)箱即用的命令
    • Selenium and chromedriver dependencies自動(dòng)處理
    • 自動(dòng)生成Selenium服務(wù)器。
      npm run lint
      運(yùn)行eslint

Babel 配置

這個(gè)模板使用了babel-preset-env來(lái)配置babel丹莲,更多信息參考http://2ality.com/2017/02/babel-preset-env.html.
一個(gè)預(yù)選設(shè)置的Babel可以自動(dòng)將es6降級(jí)為es5,根據(jù)目標(biāo)瀏覽器或者運(yùn)行環(huán)境
使用browserslist
去壓縮這些信息所以我們可以使用valid query format supported by browserslist.
然后這里有個(gè)警告光坝,browserslist推薦定義目標(biāo)文件類(lèi)似package.json或者. browserslistrc配置文件。這樣允許一些工具圾笨,類(lèi)似 autoprefixer and eslint-plugin-compat 去分享這些配置教馆,在這個(gè)模板中browserslist配置在package.json:

{
  "...": "...",
  "browserslist": [
    "> 1%",
    "last 2 versions",
    "not ie <= 8"
  ]
}

但在最新的babel-preset-envv1.6.1穩(wěn)定發(fā)行版中。沒(méi)有支持加載配置文件從package.json擂达,所以配置環(huán)境重復(fù)在.babelrc.如果你希望改變你的目標(biāo)環(huán)境土铺,請(qǐng)確定更新了package.json. babelrc。這個(gè)問(wèn)題已經(jīng)在測(cè)試版修正板鬓。模板會(huì)在正式版出來(lái)更新悲敷。

Linter配置

這個(gè)模板利用ESLinter作為linter,使用標(biāo)準(zhǔn)的預(yù)設(shè)和一些自定義操作。
如果你不喜歡這些預(yù)定的規(guī)則俭令,你有已下幾種選擇后德。
1。在.eslintrc.js中重寫(xiě)linter規(guī)則抄腔。例如你可以強(qiáng)制使用分號(hào)而不是忽略他們:

// .eslintrc.js
"semi": [2, "always"]
  1. 當(dāng)生成項(xiàng)目的時(shí)候瓢湃,選擇一個(gè)不同的預(yù)設(shè)。例如eslint-config-airbnb.
    3 當(dāng)生成項(xiàng)目定義自己的規(guī)則的時(shí)候赫蛇,對(duì)于ESLinter選擇none绵患。更多細(xì)節(jié)See ESLint documentation for more details.

修正Linter錯(cuò)誤

你可以使用以下命令去修復(fù)錯(cuò)誤(不能修復(fù)所有的錯(cuò)誤)

npm run lint -- --fix

在中間的--是有必要的確定--fix是傳給lint 而不是npm的
該模板為大多數(shù)CSS預(yù)處理器預(yù)先配置了CSS提取。要使用預(yù)處理器悟耘,只需要安裝相應(yīng)的webpack加載程序落蝙。例如SASS

npm install sass-loader node-sass --save-dev

你需要安裝node-sass因?yàn)閟ass-loader依賴(lài)他

在組件中中使用預(yù)處理器

一旦你安裝了預(yù)處理器,你可以在.vue 中使用style標(biāo)簽的lang屬性

<style lang="scss">
/* write SASS! */
</style>

一個(gè)SASS語(yǔ)法的提示

lang =“scss”對(duì)應(yīng)于CSS超集語(yǔ)法(帶花括號(hào)和分號(hào))。
lang =“sass”對(duì)應(yīng)于基于縮進(jìn)的語(yǔ)法筏勒。

PostCss

  • .vue文件和樣式文件(* .css移迫,* .scss等)中的樣式默認(rèn)被PostCss輸出。你不要使用特定的加載器
    你可以簡(jiǎn)單的增加PostCss插件管行,通過(guò)在根目錄添加.postcssrc.js
// https://github.com/michael-ciniawsky/postcss-load-config

module.exports = {
  "plugins": {
    // to edit target browsers: use "browserslist" field in package.json
    "postcss-import": {},
    "autoprefixer": {}
  }
}

See vue-loader's related documentation for more details.

獨(dú)立的CSS文件

為了確保提取和處理的一致性厨埋。推薦你導(dǎo)入全局,獨(dú)立的樣式在App.vue組件中病瞳。例如

<!-- App.vue -->
<style src="./styles/global.less" lang="less"></style>

在程序中你應(yīng)該只對(duì)自己寫(xiě)的樣式這樣操作揽咕。對(duì)于已經(jīng)存在的庫(kù) e.g. Bootstrap or Semantic UI你可以放在index.html并且引入他們。這樣避免構(gòu)建時(shí)間和瀏覽器緩存

處理靜態(tài)Assets

你應(yīng)該在注意到在項(xiàng)目結(jié)構(gòu)總有2個(gè)靜態(tài)資源文件夾src/assetsstatic/.區(qū)別是什么呢套菜?

Webpacked Assets

為了回答這個(gè)問(wèn)題亲善,我們要知道Webpack如何處理這些assets,在*.vue的組件中。你的所有模板和css樣式都被vue-html-loader and css-loader解析以查找資源urls逗柴。
舉例<img src="./logo.png"> and background: url(./logo.png), "./logo.png"是相對(duì)資源路徑會(huì)被webpack作為模塊依賴(lài)性解決蛹头。

因?yàn)?code>logo.png不是js,當(dāng)作為模塊依賴(lài)性對(duì)待的時(shí)候,我們需要使用url-loader and file-loader去處理戏溺。這個(gè)模板渣蜗,已經(jīng)配置了這些loaders。你可以免費(fèi)獲得如filename fingerprinting和 base64內(nèi)聯(lián)功能旷祸,當(dāng)你使用相對(duì)路徑的時(shí)候不用考慮部署問(wèn)題耕拷。

由于這些資產(chǎn)可能在構(gòu)建過(guò)程中被內(nèi)聯(lián)/復(fù)制/重命名,因此它們基本上是源代碼的一部分托享。這就是為什么建議將Webpack處理的靜態(tài)資源放置在/ src中以及其他源文件的原因骚烧。 實(shí)際上,你甚至不必將它們?nèi)糠旁? src / assets中:您可以使用它們根據(jù)模塊/組件組織它們闰围。 例如赃绊,您可以將每個(gè)組件放在其自己的目錄中,其靜態(tài)assets就位于其旁邊羡榴。

Asset 解析規(guī)則

1 urls 相對(duì)路徑:類(lèi)似./assets/logo.png會(huì)被解釋成模塊依賴(lài)碧查,會(huì)被替換成由webpack基于你輸出配置的自動(dòng)生成的url路徑
2 沒(méi)有前綴的urls 類(lèi)似assets/logo.png等同于./assets/logo.png
3 帶有~前綴的urls : 會(huì)被作為一個(gè)模塊請(qǐng)求,類(lèi)似require('some-module/image.png')校仑,如果你想利用Webpack模塊解析配置忠售,你需要使用這個(gè)前綴
4 根目錄相對(duì)路徑。 不會(huì)被處理

在js中獲取Asset路徑

為了在webpack中返回正確的路徑迄沫,你需要使用require('./relative/path/to/file.jpg')
稻扬,這會(huì)被file-loader處理并且返回解析后的路徑 例如:

computed: {
  background () {
    return require('./bgs/' + this.id + '.jpg')
  }
}

注釋?zhuān)?例子中的圖片在最后的build中都會(huì)在./bgs/。因?yàn)閣ebpack無(wú)法猜測(cè)在運(yùn)行是什么時(shí)候時(shí)候使用到邢滑。

真正靜態(tài)資源

作為對(duì)比腐螟,在static/不會(huì)被webapck處理.他們會(huì)被直接復(fù)制并且相同的文件名。你必須使用他們用絕對(duì)路徑困后。這個(gè)絕對(duì)路徑是這是通過(guò)在config.js中加入build.assetsPublicPath和build.assetsSubDirectory來(lái)確定的

// config/index.js
module.exports = {
  // ...
  build: {
    assetsPublicPath: '/',
    assetsSubDirectory: 'static'
  }
}

所有放在static/文件加下面的文件必須使用絕對(duì)路徑static/filename乐纸。如果你改變了assetSubDirectoryasset。路徑變?yōu)?code>asset/filename

環(huán)境變量

有時(shí)根據(jù)應(yīng)用程序運(yùn)行的環(huán)境具有不同的配置值是可行的摇予。
類(lèi)似

// config/prod.env.js
module.exports = {
  NODE_ENV: '"production"',
  DEBUG_MODE: false,
  API_KEY: '"..."' // this is shared between all environments
}

// config/dev.env.js
module.exports = merge(prodEnv, {
  NODE_ENV: '"development"',
  DEBUG_MODE: true // this overrides the DEBUG_MODE value of prod.env
})

// config/test.env.js
module.exports = merge(devEnv, {
  NODE_ENV: '"testing"'
})

注釋?zhuān)?字符串變量需要'"..."'
綜上汽绢,環(huán)境變量

Production
NODE_ENV = 'production',
DEBUG_MODE = false,
API_KEY = '...'
Development
NODE_ENV = 'development',
DEBUG_MODE = true,
API_KEY = '...'
Testing
NODE_ENV = 'testing',
DEBUG_MODE = true,
API_KEY = '...'

test.env 繼承dev ,dev繼承prod.env

使用

最簡(jiǎn)單的使用方法

Vue.config.productionTip = process.env.NODE_ENV === 'production'

于后端框架集成

如果你構(gòu)建的是純靜態(tài)界面(沒(méi)有端口api交互的),你就不需要編輯config/index.js.
然而你像集成這個(gè)模板到現(xiàn)有的后端框架中侧戴。你需要編輯config/index.js直接生成前段資源給后端宁昭。
默認(rèn)的config/index.js

// config/index.js
'use strict'
const path = require('path')

module.exports = {
  dev: {
    / Paths
    assetsSubDirectory: 'static',
    assetsPublicPath: '/',
    proxyTable: {},

    // Various Dev Server settings
    host: 'localhost',
    port: 8080, 

    // skipping other options as they are only convenience features
  },
  build: {
    // Template for index.html
    index: path.resolve(__dirname, '../dist/index.html'),

    // Paths
    assetsRoot: path.resolve(__dirname, '../dist'),
    assetsSubDirectory: 'static',
    assetsPublicPath: '/',

    productionSourceMap: true,

    // skipping the rest ...
  },
}

在build的括號(hào)中,有這幾個(gè)選項(xiàng)酗宋。
build.index

必須是當(dāng)?shù)匚募到y(tǒng)中的絕對(duì)路徑

這個(gè)是index.html自動(dòng)生成的
你可以相應(yīng)地編輯index.html并將此路徑指向您的后端應(yīng)用程序呈現(xiàn)的視圖文件积仗,
app/views/layouts/application.html.erb for a Rails app, or resources/views/index.blade.php for a Laravel app.

build.assetsRoot

也必須是絕對(duì)路徑

必須指向包含靜態(tài)資源的根目錄
For example, public/ for both Rails/Laravel.
build.assetsSubDirectory
webpack生成器嵌套在build.assetsRoot文件夾中,其他文件不應(yīng)該混合在一起蜕猫。舉個(gè)例子寂曹,如果build.assetsRoot/path/to/dist.build.assetsSubDirectorystatic。那么webpack 生成的資源就會(huì)在path/to/dist/static文件夾下回右。

這個(gè)目錄會(huì)在每次build的時(shí)候清除隆圆。所以他應(yīng)該只包含build生成的資源文件。

/static中的文件都在會(huì)構(gòu)建時(shí)翔烁,拷貝到該目錄渺氧。這意思是如果你改變了這個(gè)前綴所有在/static中絕對(duì)路徑的URLs都需要改變。

build.assetsPublicPath
這應(yīng)該是你的build.assetsRoot將通過(guò)HTTP提供的URL路徑蹬屹。 在大多數(shù)情況下侣背,這將是根(/)。 只有在后端框架為路徑前綴提供靜態(tài)資產(chǎn)時(shí)才更改此設(shè)置哩治。 在內(nèi)部秃踩,這作為output.publicPath傳遞給Webpack。

build.productionSourceMap
是否在生產(chǎn)模式下生成資源映射

dev.port
指定開(kāi)發(fā)端口號(hào)

dev.proxyTable
定義開(kāi)發(fā)服務(wù)器的代理規(guī)則

在開(kāi)發(fā)模式下的API代理

當(dāng)需要集成當(dāng)前模板到現(xiàn)有后臺(tái)框架的時(shí)候业筏。最常見(jiàn)的需求就是使用開(kāi)發(fā)服務(wù)器請(qǐng)求后臺(tái)API憔杨。為了這樣,我們可以運(yùn)行開(kāi)發(fā)服務(wù)器和后臺(tái)服務(wù)器蒜胖,讓開(kāi)發(fā)服務(wù)器代理api請(qǐng)求到真正的后臺(tái)服務(wù)器消别。

為了配置代理規(guī)則。編輯config/index.js中的dev.proxyTable.這個(gè)開(kāi)發(fā)服務(wù)器是使用http-proxy-middleware
來(lái)代理台谢。所以你可以查看文檔來(lái)了解使用細(xì)節(jié)寻狂。這邊有個(gè)簡(jiǎn)單的例子。

// config/index.js
module.exports = {
  // ...
  dev: {
    proxyTable: {
      // proxy all requests starting with /api to jsonplaceholder
      '/api': {
        target: 'http://jsonplaceholder.typicode.com',
        changeOrigin: true,
        pathRewrite: {
          '^/api': ''
        }
      }
    }
  }
}

上面的例子會(huì)代理請(qǐng)求/api/posts/1http://jsonplaceholder.typicode.com/posts/1上面去朋沮。

URL 匹配

除了靜態(tài)URL之外蛇券,您還可以使用全局模式來(lái)匹配網(wǎng)址,例如/ API/**。除此之外纠亚,你可以自定義方法來(lái)確定是否請(qǐng)求可以被代理塘慕。

proxyTable: {
  '**': {
    target: 'http://jsonplaceholder.typicode.com',
    filter: function (pathname, req) {
      return pathname.match('^/api') && req.method === 'GET'
    }
  }
}

單元測(cè)試

項(xiàng)目提供了2種單元測(cè)試。
1.Jest
2.Karma and Mocha

Jest

啟動(dòng)JSDOM的測(cè)試運(yùn)行器運(yùn)行測(cè)試并將結(jié)果報(bào)告給我們蒂胞。

Files

setup.js
Jest在運(yùn)行單元測(cè)試之前運(yùn)行此文件图呢。 它將Vue生產(chǎn)提示設(shè)置為false。

Mocking 依賴(lài)

Karma and Mocha

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末骗随,一起剝皮案震驚了整個(gè)濱河市蛤织,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌鸿染,老刑警劉巖指蚜,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異涨椒,居然都是意外死亡姚炕,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)丢烘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)柱宦,“玉大人,你說(shuō)我怎么就攤上這事播瞳〉Э” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵赢乓,是天一觀的道長(zhǎng)忧侧。 經(jīng)常有香客問(wèn)我,道長(zhǎng)牌芋,這世上最難降的妖魔是什么蚓炬? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮躺屁,結(jié)果婚禮上肯夏,老公的妹妹穿的比我還像新娘。我一直安慰自己犀暑,他們只是感情好驯击,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著耐亏,像睡著了一般徊都。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上广辰,一...
    開(kāi)封第一講書(shū)人閱讀 51,146評(píng)論 1 297
  • 那天暇矫,我揣著相機(jī)與錄音主之,去河邊找鬼。 笑死李根,一個(gè)胖子當(dāng)著我的面吹牛杀餐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播朱巨,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼枉长!你這毒婦竟也來(lái)了冀续?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤必峰,失蹤者是張志新(化名)和其女友劉穎洪唐,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體吼蚁,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡凭需,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了肝匆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片粒蜈。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖旗国,靈堂內(nèi)的尸體忽然破棺而出枯怖,到底是詐尸還是另有隱情,我是刑警寧澤能曾,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布度硝,位于F島的核電站,受9級(jí)特大地震影響寿冕,放射性物質(zhì)發(fā)生泄漏蕊程。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一驼唱、第九天 我趴在偏房一處隱蔽的房頂上張望藻茂。 院中可真熱鬧,春花似錦玫恳、人聲如沸捌治。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)肖油。三九已至,卻和暖如春臂港,著一層夾襖步出監(jiān)牢的瞬間森枪,已是汗流浹背视搏。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留县袱,地道東北人浑娜。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像式散,于是被迫代替她去往敵國(guó)和親筋遭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • 廣州,溫度:37℃乖篷,氣壓1001hpa响驴。 黨課在談到考研,談就業(yè)撕蔼。風(fēng)扇在呼呼吹著豁鲤,課室比外面還熱【ň冢總覺(jué)得琳骡,...
    YiZmi閱讀 303評(píng)論 0 0