【進(jìn)階系列】前端開發(fā)環(huán)境構(gòu)建(七)JS依賴管理 -- Bower

2.4 Bower——js依賴管理的工具

2.4.1 bower介紹

????????Bower是 twitter 推出的一款包管理工具,基于nodejs的模塊化思想,把功能分散到各個(gè)模塊中,讓模塊和模塊之間存在聯(lián)系丧枪,通過Bower 來(lái)管理模塊間的這種聯(lián)系榛瓮。

????????包管理工具一般有以下的功能:

????1、注冊(cè)機(jī)制:每個(gè)包需要確定一個(gè)唯一的ID 使得搜索和下載的時(shí)候能夠正確匹配洗显,所以包管理工具需要維護(hù)注冊(cè)信息,可以依賴其他平臺(tái)原环。

????2挠唆、文件存儲(chǔ):確定文件存放的位置,下載的時(shí)候可以找到嘱吗,當(dāng)然這個(gè)地址在網(wǎng)絡(luò)上是可訪問的玄组。

????3、上傳下載:這是工具的主要功能谒麦,能提高包使用的便利性俄讹。比如想用jquery 只需要 install 一下就可以了,不用到處找下載绕德。上傳并不是必備的患膛,根據(jù)文件存儲(chǔ)的位置而定,但需要有一定的機(jī)制保障耻蛇。

????4、依賴分析:這也是包管理工具主要解決的問題之一,既然包之間是有聯(lián)系的款票,那么下載的時(shí)候就需要處理他們之間的依賴。下載一個(gè)包的時(shí)候也需要下載依賴的包漱牵。

????????功能介紹,摘自文章:http://chuo.me/2013/02/twitter-bower.html

2.4.2 bower安裝

????????bower插件是通過npm, Node.js包管理器安裝和管理的.

2.4.2.1 我的系統(tǒng)環(huán)境

???????? win7 64bit

???????? Nodejs:v0.10.5

???????? Npm:1.2.19

~ D:\workspace\javascript>node –v v0.10.5

~ D:\workspace\javascript>npm –v 1.2.19

????????在系統(tǒng)中疚漆,我們已經(jīng)安裝好了Nodejs和npm酣胀。win7安裝nodejs請(qǐng)參考文章:Nodejs開發(fā)框架Express3.0開發(fā)手記–從零開始

2.4.2.2 安裝bower

全局安裝bower

~ D:\workspace\javascript>npm install bower -g

新建一個(gè)express3的項(xiàng)目nodejs-bower

~ D:\workspace\javascript>express -e nodejs-bower

~ D:\workspace\javascript>cd

nodejs-bower && npm install

Mac下安裝:

sudo npm

install -g bower

2.4.3 bower命令

????????Commands,列出了bower支持的各種命令娶聘。

????cache: bower緩存管理

????help: 顯示Bower命令的幫助信息

????home: 通過瀏覽器打開一個(gè)包的github發(fā)布頁(yè)

????info: 查看包的信息

????init: 創(chuàng)建bower.json文件

????install: 安裝包到項(xiàng)目

????link: 在本地bower庫(kù)建立一個(gè)項(xiàng)目鏈接

????list: 列出項(xiàng)目已安裝的包

????lookup: 根據(jù)包名查詢包的URL

????prune: 刪除項(xiàng)目無(wú)關(guān)的包

????register: 注冊(cè)一個(gè)包

????search: 搜索包

????update: 更新項(xiàng)目的包

????uninstall: 刪除項(xiàng)目的包

2.4.4 bower使用范例

2.4.4.1 安裝jQuery到項(xiàng)目nodejs-bower

~ D:\workspace\javascript\nodejs-bower>bower install jquery

bower jquery#*?????????????not-cached git://github.com/components/jquery.git#*

bower jquery#*????????????????resolve git://github.com/components/jquery.git#*

bower jquery#*???????????????download https://github.com/components/jquery/archive/2.0.3.tar.gz

bower jquery#*????????????????extract archive.tar.gz

bower jquery#*???????????????resolved git://github.com/components/jquery.git#2.0.3

bower jquery#~2.0.3???????????install jquery#2.0.3

jquery#2.0.3 bower_components\jquery

????????通過執(zhí)行命令闻镶,我們可以看到j(luò)Query的最新版本被下載,并安裝到項(xiàng)目的bower_components\jquery目錄

????????查看bower_components/jquery目錄趴荸,發(fā)現(xiàn)了3個(gè)文件儒溉。

~ D:\workspace\javascript\nodejs-bower>ls bower_components/jquery -a

.? ..? .bower.json?component.json? jquery.js

????????同樣地宦焦,我們的項(xiàng)目還需要d3的類庫(kù)

~ D:\workspace\javascript\nodejs-bower>bower install d3

bower d3#*?????????????????not-cached git://github.com/mbostock/d3.git#*

bower d3#*???????????????????? resolvegit://github.com/mbostock/d3.git#*

bower d3#*???????????????????download https://github.com/mbostock/d3/archive/v3.2.8.tar.gz

bower d3#*????????????????????extract archive.tar.gz

bower d3#*???????????????????resolved git://github.com/mbostock/d3.git#3.2.8

bower d3#~3.2.8???????????????install d3#3.2.8

d3#3.2.8 bower_components\d3

????????非常方便发钝,下載并安裝完成!

2.4.4.2 查看項(xiàng)目中已導(dǎo)入的類庫(kù)

~ D:\workspace\javascript\nodejs-bower>bower list

bower check-new???? Checking for newversions of the project dependencies..

nodejs-bower#0.0.0 D:\workspace\javascript\nodejs-bower

├── d3#3.2.8

└── jquery#2.0.3

2.4.4.3 安裝bootstrap庫(kù)波闹,并查看依賴情況

~ D:\workspace\javascript\nodejs-bower>bower install bootstrap

bower bootstrap#*??????????????cached git://github.com/twbs/bootstrap.git#3.0.0-rc1

bower bootstrap#*? ???????????validate 3.0.0-rc1 againstgit://github.com/twbs/bootstrap.git#*

bower jquery#>= 1.9.0??????????cached git://github.com/components/jquery.git#2.0.3

bower jquery#>= 1.9.0????????validate 2.0.3 against git://github.com/components/jquery.git#>= 1.9.0

bower bootstrap#~3.0.0-rc1????install bootstrap#3.0.0-rc1

bootstrap#3.0.0-rc1 bower_components\bootstrap

└── jquery#2.0.3

~ D:\workspace\javascript\nodejs-bower>bower list

bower check-new???? Checking for newversions of the project dependencies..

nodejs-bower#0.0.0 D:\workspace\javascript\nodejs-bower

├─┬ bootstrap#3.0.0-rc1 extraneous

│ └── jquery#2.0.3

├── d3#3.2.8

└── jquery#2.0.3

????????我們發(fā)現(xiàn)bootstrap酝豪,對(duì)jquery是有依賴的。

2.4.4.4 刪除jQuery庫(kù)精堕,破壞依賴關(guān)系

~ D:\workspace\javascript\nodejs-bower>bower uninstall jquery

bower conflict????? bootstrapdepends on jquery

Continue anyway? (y/n) y

bower uninstall???? jquery

~ D:\workspace\javascript\nodejs-bower>bower list

bower check-new???? Checking for newversions of the project dependencies..

nodejs-bower#0.0.0 D:\workspace\javascript\nodejs-bower

├─┬ bootstrap#3.0.0-rc1 extraneous

│ └── jquery missing

├── d3#3.2.8

└── jquery missing

2.4.4.5 安裝低版本的jQuery孵淘,制造不版本兼容

~ D:\workspace\javascript\nodejs-bower>bower install jquery#1.7.2

bower jquery#~2.0.3????????????cached git://github.com/components/jquery.git#2.0.3

bower jquery#~2.0.3??????????validate 2.0.3 against git://github.com/components/jquery.git#~2.0.3

bower jquery#>= 1.9.0??????????cached git://github.com/components/jquery.git#2.0.3

bower jquery#>= 1.9.0?????? ??validate 2.0.3 againstgit://github.com/components/jquery.git#>= 1.9.0

bower jquery#1.7.2?????????????cached git://github.com/components/jquery.git#1.7.2

bower jquery#1.7.2???????????validate 1.7.2 against git://github.com/components/jquery.git#1.7.2

Unable to find a suitable version for jquery, please choose one:

??? 1) jquery#1.7.2 which resolvedto 1.7.2

??? 2) jquery#~2.0.3 which resolvedto 2.0.3 and has nodejs-bower as dependants

??? 3) jquery#>= 1.9.0 whichresolved to 2.0.3 and has bootstrap#3.0.0-rc1 as dependants

Prefix the choice with ! to persist it to bower.json

Choice: 1

bower jquery#1.7.2????????????install jquery#1.7.2

jquery#1.7.2 bower_components\jquery

~ D:\workspace\javascript\nodejs-bower>bower list

bower check-new???? Checking for newversions of the project dependencies..

nodejs-bower#0.0.0 D:\workspace\javascript\nodejs-bower

├─┬ bootstrap#3.0.0-rc1 extraneous

│ └── jquery#1.7.2 incompatible with >= 1.9.0 (2.0.3 available)

├── d3#3.2.8

└── jquery#1.7.2 incompatible with ~2.0.3 (2.0.3 available)

????????我們可以清楚的看到bower,很明確的告訴了我們歹篓,jquery和bootstrap是不兼容的瘫证,強(qiáng)大之處大家應(yīng)該有所體會(huì)。

2.4.4.6 升級(jí)jQuery庄撮,讓版本兼容

~ D:\workspace\javascript\nodejs-bower>bower update jquery

bower jquery#~2.0.3????????????cached git://github.com/components/jquery.git#2.0.3

bower jquery#~2.0.3??????????validate 2.0.3 against git://github.com/components/jquery.git#~2.0.3

bower jquery#>= 1.9.0??????????cached git://github.com/components/jquery.git#2.0.3

bower jquery#>= 1.9.0????????validate 2.0.3 against git://github.com/components/jquery.git#>=1.9.0

bower jquery#~2.0.3???????????install jquery#2.0.3

jquery#2.0.3 bower_components\jquery

~ D:\workspace\javascript\nodejs-bower>bower list

bower check-new???? Checking for newversions of the project dependencies..

nodejs-bower#0.0.0 D:\workspace\javascript\nodejs-bower

├─┬ bootstrap#3.0.0-rc1 extraneous

│ └── jquery#2.0.3

├── d3#3.2.8

└── jquery#2.0.3

????????多么智能背捌,一鍵搞定,這才是高效的開發(fā)洞斯。

2.4.4.7 查看本地bower已經(jīng)緩存的類庫(kù)

~ D:\workspace\javascript\nodejs-bower>bower cache list

bootstrap=git://github.com/twbs/bootstrap.git#3.0.0-rc1

d3=git://github.com/mbostock/d3.git#3.2.8

jquery=git://github.com/components/jquery.git#1.7.2

jquery=git://github.com/components/jquery.git#2.0.3

2.4.4.8 查看D3庫(kù)信息

~ D:\workspace\javascript\nodejs-bower>bower info d3

d3

? Versions:

??? - 3.2.8

??? - 3.2.7

??? - 3.2.6

??? - 3.2.5

??? - 3.2.4

??? - 3.2.3

...

2.4.4.9 查看dojo庫(kù)的url

~ D:\workspace\javascript\nodejs-bower>bower lookup dojo

dojo git://github.com/dojo/dojo.git

2.4.4.10? 用瀏覽器打開dojo的發(fā)布主頁(yè)

~ D:\workspace\javascript\nodejs-bower>bower home dojo

bower dojo#*? ??????????????not-cachedgit://github.com/dojo/dojo.git#*

bower dojo#*??????????????????resolve git://github.com/dojo/dojo.git#*

bower dojo#*?????????????????download https://github.com/dojo/dojo/archive/1.9.1.tar.gz

bower dojo#*??????????????????extract archive.tar.gz

bower dojo#*?????????????????resolved git://github.com/dojo/dojo.git#1.9.1

????????瀏覽器自動(dòng)打開:https://github.com/dojo/dojo

2.4.4.11 查詢包含dojo的類庫(kù)

~ D:\workspace\javascript\nodejs-bower>bower search dojo

Search results:

??? dojogit://github.com/dojo/dojo.git

??? dojoxgit://github.com/dojo/dojox.git

??? dojo-utilgit://github.com/dojo/util.git

??? dojo-bootstrapgit://github.com/samvdb/Dojo-Bootstrap

????????真是方便實(shí)用的技術(shù)毡庆。

2.4.5 用bower提交自己類庫(kù)

2.4.5.1 生成bower.json配置文件

~ D:\workspace\javascript\nodejs-bower>bower init

bower existing????? The existingbower.json file will be used and filled in

[?] name: nodejs-bower

[?] version: 0.0.0

[?] main file:

[?] set currently installed components as dependencies? No

[?] add commonly ignored files to ignore list? Yes

????????查看生成的文件bower.json

{

? "name":"nodejs-bower",

? "version":"0.0.0",

? "ignore": [

??? "**/.*",

??? "node_modules",

??? "bower_components",

??? "test",

??? "tests"

? ],

? "dependencies": {

??? "d3":"git://github.com/mbostock/d3.git#~3.2.8",

??? "jquery":"git://github.com/components/jquery.git#~2.0.3"

? }

}

2.4.5.2 在github創(chuàng)建一個(gè)資源庫(kù)

2).?github創(chuàng)建一個(gè)資源庫(kù):nodejs-bower

2.4.5.3 本地工程綁定github

~ D:\workspace\javascript\nodejs-bower>git init

Initialized empty Git repository inD:/workspace/javascript/nodejs-bower/.git/

~ D:\workspace\javascript\nodejs-bower>git add .

~ D:\workspace\javascript\nodejs-bower>git commit -m "firstcommit"

# On branch master

#

# Initial commit

#

# Untracked files:

#?? (use "git add ..." toinclude in what will be committed)

#

#?????? app.js

#?????? bower.json

#?????? bower_components/

#?????? node_modules/

#?????? package.json

#?????? public/

#?????? routes/

#?????? views/

nothing added to commit but untracked files present (use "gitadd" to track)

~ D:\workspace\javascript\nodejs-bower>git remote add originhttps://github.com/bsspirit/nodejs-bower

~ D:\workspace\javascript\nodejs-bower>git push -u origin master

Counting objects: 565, done.

Delta compression using up to 4 threads.

Compressing objects: 100% (516/516), done.

Writing objects: 100% (565/565), 803.08 KiB, done.

Total 565 (delta 26), reused 0 (delta 0)

To https://github.com/bsspirit/nodejs-bower

?* [new branch]????? master -> master

Branch master set up to track remote branch master from origin.

2.4.5.4 注冊(cè)到bower官方類庫(kù)

4).?注冊(cè)到bower官方類庫(kù)

~ D:\workspace\javascript\nodejs-bower>bower register nodejs-bowergit@github.com:bsspirit/nodejs-bower.git

bower?????????????????????????convert Converted git@github.com:bsspirit/nodejs-bower.git togit://github.com/bsspirit/nodejs-bower.git

bower nodejs-bower#*??????????resolve git://github.com/bsspirit/nodejs-bower.git#*

bower nodejs-bower#*?????????checkout master

bower nodejs-bower#*?????????resolved git://github.com/bsspirit/nodejs-bower.git#af3ceaac07

Registering a package will make it visible and installable via the registry (https://bower.herokuapp.com), continue? (y/n)??????????????????? y

bower nodejs-bower???????????register git://github.com/bsspirit/nodejs-bower.git

Package nodejs-bower registered successfully!

All valid semver tags on git://github.com/bsspirit/nodejs-bower.git will be available as versions.

To publish a new version, you just need release a valid semver tag.

Run bower info nodejs-bower to list the package versions.

2.4.5.5 查詢我們自己的包

5).?查詢我們自己的包

D:\workspace\javascript\nodejs-bower>bower search nodejs-bower

Search results:

nodejs-bowergit://github.com/bsspirit/nodejs-bower.git

2.4.5.6 安裝我們自己的包

6).?安裝我們自己的包

D:\workspace\javascript\nodejs-bower>bower install nodejs-bower

bower nodejs-bower#*???????????cached git://github.com/bsspirit/nodejs-bower.git#af3ceaac07

bower nodejs-bower#*?????????validate af3ceaac07 against git://github.com/bsspirit/nodejs-bower.git#*

bower nodejs-bower#*??????????install nodejs-bower#af3ceaac07

nodejs-bower#af3ceaac07 bower_components\nodejs-bower

├── d3#3.2.8

└── jquery#2.0.3

????????其實(shí)模塊化,版本依賴烙如,開發(fā)類庫(kù)么抗,發(fā)布類庫(kù),安裝類庫(kù)亚铁,都是一條命令蝇刀!還能再簡(jiǎn)單一點(diǎn)么!快把項(xiàng)目模塊化徘溢,然后分享給大家吧M趟觥仰迁!未來(lái)是屬于開發(fā)者的。

2.4.6 在WebStorm中使用bower

2.4.6.1 往bower.json中添加插件包

內(nèi)容格式如下:

{

??? "name":"HJNodeJSPro2",

???"description": "A starter project for AngularJS",

???"version": "0.0.0",

???"license": "MIT",

???"private": true,

???"dependencies": {

???????"angular": "1.4.x",

???????"angular-mocks": "1.4.x",

???????"jquery": "~2.1.1",

???????"bootstrap": "~3.1.1",

???????"angular-route": "1.4.x",

???????"angular-resource": "1.4.x",

???????"angular-animate": "1.4.x",

??????????????????????? ?“susy”,

??? }

}

2.4.7 參考鏈接

Bower—— 一個(gè)Web的包管理工具

http://ce.sysu.edu.cn/hope/Item/119408.aspx

(Good)Using Bower in WebStorm

http://blog.jetbrains.com/webstorm/2014/04/using-bower-in-webstorm/

js依賴管理的工具

http://bower.io

bower解決js的依賴管理

http://blog.fens.me/nodejs-bower-intro/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末顽分,一起剝皮案震驚了整個(gè)濱河市徐许,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌卒蘸,老刑警劉巖雌隅,帶你破解...
    沈念sama閱讀 216,470評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異缸沃,居然都是意外死亡恰起,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門趾牧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)检盼,“玉大人,你說我怎么就攤上這事翘单《滞鳎” “怎么了?”我有些...
    開封第一講書人閱讀 162,577評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵哄芜,是天一觀的道長(zhǎng)貌亭。 經(jīng)常有香客問我,道長(zhǎng)认臊,這世上最難降的妖魔是什么圃庭? 我笑而不...
    開封第一講書人閱讀 58,176評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮失晴,結(jié)果婚禮上剧腻,老公的妹妹穿的比我還像新娘。我一直安慰自己涂屁,他們只是感情好书在,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著胯陋,像睡著了一般蕊温。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上遏乔,一...
    開封第一講書人閱讀 51,155評(píng)論 1 299
  • 那天义矛,我揣著相機(jī)與錄音,去河邊找鬼盟萨。 笑死凉翻,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的捻激。 我是一名探鬼主播制轰,決...
    沈念sama閱讀 40,041評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼前计,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了垃杖?” 一聲冷哼從身側(cè)響起男杈,我...
    開封第一講書人閱讀 38,903評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎调俘,沒想到半個(gè)月后伶棒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,319評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡彩库,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評(píng)論 2 332
  • 正文 我和宋清朗相戀三年肤无,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片骇钦。...
    茶點(diǎn)故事閱讀 39,703評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡宛渐,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出眯搭,到底是詐尸還是另有隱情窥翩,我是刑警寧澤,帶...
    沈念sama閱讀 35,417評(píng)論 5 343
  • 正文 年R本政府宣布坦仍,位于F島的核電站鳍烁,受9級(jí)特大地震影響叨襟,放射性物質(zhì)發(fā)生泄漏繁扎。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評(píng)論 3 325
  • 文/蒙蒙 一糊闽、第九天 我趴在偏房一處隱蔽的房頂上張望梳玫。 院中可真熱鬧,春花似錦右犹、人聲如沸提澎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)盼忌。三九已至,卻和暖如春掂墓,著一層夾襖步出監(jiān)牢的瞬間谦纱,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工君编, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留跨嘉,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,711評(píng)論 2 368
  • 正文 我出身青樓吃嘿,卻偏偏與公主長(zhǎng)得像祠乃,于是被迫代替她去往敵國(guó)和親梦重。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評(píng)論 2 353

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

  • 大部分的后端會(huì)很很鄙視前端亮瓷。我也不知道為什么琴拧,可能大部分人都會(huì)覺得腳本語(yǔ)言根本不算語(yǔ)言。 大多人 會(huì)叫我們切圖仔嘱支,...
    小黑的眼閱讀 3,330評(píng)論 0 15
  • 其實(shí)讀海子之前艾蓝,我并不喜歡現(xiàn)代詩(shī)。腦海中的現(xiàn)代詩(shī)斗塘,跳躍赢织、拼湊,沒有邏輯可言馍盟,還是一段一段被回車鍵分割的長(zhǎng)句于置,...
    雨擷閱讀 917評(píng)論 0 1
  • 2018的第一天,先畫張彩鉛贞岭。
    烤個(gè)雞腿給你吃閱讀 457評(píng)論 13 17
  • 莫西子詩(shī)八毯,彝族音樂人,在大涼山的懷抱中出生成長(zhǎng)瞄桨。他曾在歌中唱到:化成山脈/化成雨水/化作稻田/化作道路/永遠(yuǎn)地住在...
    二更閱讀 939評(píng)論 1 11
  • 剛過春分將至清明话速,一年花事始盛開。昨晚芯侥,空氣迷蒙泊交,百無(wú)聊奈之時(shí),我立在陽(yáng)臺(tái)欣賞起桃花柱查。才幾天功夫廓俭,怎么花色已褪色許...
    追逐曾經(jīng)落下的路途閱讀 166評(píng)論 0 1