Vue筆記——npm詳細(xì)教程

免責(zé)聲明:此文章是轉(zhuǎn)載文章悟狱,這里給出原鏈接,以示尊重貌踏。
原作者名稱:knqiufan
原作者博客:https://blog.csdn.net/knqiufan
原博客鏈接:https://blog.csdn.net/knqiufan/article/details/78571947

什么是 NPM

npm 之于 Node.js 虑绵,就像 pip 之于 Python, gem 之于 Ruby乾蛤, pear 之于 PHP 每界。

npm 是 Node.js 官方提供的包管理工具,他已經(jīng)成了 Node.js 包的標(biāo)準(zhǔn)發(fā)布平臺幻捏,用于 Node.js 包的發(fā)布盆犁、傳播、依賴控制篡九。npm 提供了命令行工具谐岁,使你可以方便地下載、安裝榛臼、升級伊佃、刪除包,也可以讓你作為開發(fā)者發(fā)布并維護(hù)包沛善。

為什么要使用 NPM

npm 是隨同 Node.js 一起安裝的包管理工具航揉,能解決 Node.js 代碼部署上的很多問題,常見的場景有以下幾種:

  • 允許用戶從 npm 服務(wù)器下載別人編寫的第三方包到本地使用金刁。
  • 允許用戶從 npm 服務(wù)器下載并安裝別人編寫的命令行程序到本地使用帅涂。
  • 允許用戶將自己編寫的包或命令行程序上傳到 npm 服務(wù)器供別人使用。

npm 的背后尤蛮,是基于 couchdb 的一個數(shù)據(jù)庫媳友,詳細(xì)記錄了每個包的信息,包括作者产捞、版本醇锚、依賴、授權(quán)信息等坯临。它的一個很重要的作用就是:將開發(fā)者從繁瑣的包管理工作(版本焊唬、依賴等)中解放出來,更加專注于功能的開發(fā)看靠。

如何使用 NPM

安裝

npm 不需要單獨安裝赶促。在安裝 Node 的時候,會連帶一起安裝 npm 挟炬。但是鸥滨,Node 附帶的 npm 可能不是最新版本,最后用下面的命令辟宗,更新到最新版本。

$ sudo npm install npm@latest -g

如果是 Window 系統(tǒng)使用以下命令即可:

npm install npm -g

也就是使用 npm 安裝自己吝秕。之所以可以這樣泊脐,是因為 npm 本身與 Node 的其他模塊沒有區(qū)別。 然后烁峭,運行下面的命令容客,查看各種信息秕铛。

# 查看 npm 命令列表
$ npm help

# 查看各個命令的簡單用法
$ npm -l

# 查看 npm 的版本
$ npm -v

# 查看 npm 的配置
$ npm config list -l

使用

npm init

npm init 用來初始化生成一個新的 package.json 文件。它會向用戶提問一系列問題缩挑,如果你覺得不用修改默認(rèn)配置但两,一路回車就可以了。
如果使用了 -f(代表 force)供置、-y(代表 yes)谨湘,則跳過提問階段,直接生成一個新的 package.json 文件芥丧。

$ npm init -y

npm set

npm set 用來設(shè)置環(huán)境變量

$ npm set init-author-name 'Your name'
$ npm set init-author-email 'Your email'
$ npm set init-author-url 'http://yourdomain.com'
$ npm set init-license 'MIT'

上面命令等于為 npm init 設(shè)置了默認(rèn)值紧阔,以后執(zhí)行 npm init 的時候,package.json 的作者姓名续担、郵件擅耽、主頁、許可證字段就會自動寫入預(yù)設(shè)的值物遇。這些信息會存放在用戶主目錄的 ~/.npmrc 文件乖仇,使得用戶不用每個項目都輸入。如果某個項目有不同的設(shè)置询兴,可以針對該項目運行 npm config乃沙。

npm info

npm info 命令可以查看每個模塊的具體信息。比如蕉朵,查看 underscore 模塊的信息崔涂。

$ npm info underscore

上面命令返回一個 JavaScript 對象,包含了 underscore 模塊的詳細(xì)信息始衅。這個對象的每個成員冷蚂,都可以直接從 info 命令查詢。

$ npm info underscore description

$ npm info underscore homepage

$ npm info underscore version

npm search

npm search 命令用于搜索 npm 倉庫汛闸,它后面可以跟字符串蝙茶,也可以跟正則表達(dá)式。

$ npm search <搜索詞>

npm list

npm list 命令以樹形結(jié)構(gòu)列出當(dāng)前項目安裝的所有模塊诸老,以及它們依賴的模塊隆夯。

$ npm list

# 加上 global 參數(shù),會列出全局安裝的模塊
$ npm list -global

# npm list 命令也可以列出單個模塊
$ npm list underscore

npm install

使用 npm 安裝包的命令格式為:npm [install/i] [package_name]

本地模式和全局模式

npm 在默認(rèn)情況下會從 http://npmjs.org 搜索或下載包别伏,將包安裝到當(dāng)前目錄的 node_modules 子目錄下蹄衷。

如果你熟悉 Ruby 的 gem 或者 Python 的 pip,你會發(fā)現(xiàn) npm 與它們的行為不同厘肮,gem 或 pip 總是以全局模式安裝愧口,使包可以供所有的程序使用,而 npm 默認(rèn)會把包安裝到當(dāng)前目錄下类茂。這反映了 npm 不同的設(shè)計哲學(xué)耍属。如果把包安裝到全局托嚣,可以提供程序的重復(fù)利用程度,避免同樣的內(nèi)容的多分副本厚骗,但壞處是難以處理不同的版本依賴示启。如果把包安裝到當(dāng)前目錄,或者說本地领舰,則不會有不同程序依賴不同版本的包的沖突問題夫嗓,同時還減輕了包作者的 API 兼容性壓力,但缺陷則是同一個包可能會被安裝許多次提揍。

我們在使用 supervisor 的時候使用了 npm install -g supervisor 命令啤月,就是以全局模式安裝 supervisor 。

這里注意一點的就是劳跃,supervisor 必須安裝到全局谎仲,如果你不安裝到全局,錯誤命令會提示你安裝到全局刨仑。如果不想安裝到默認(rèn)的全局郑诺,也可以自己修改全局路徑到當(dāng)前路徑 npm config set prefix "路徑" 安裝完以后就可以用 supervisor 來啟動服務(wù)了。

supervisor 可以幫助你實現(xiàn)這個功能杉武,它會監(jiān)視你對代碼的驅(qū)動辙诞,并自動重啟 Node.js 。

一般來說轻抱,全局安裝只適用于工具模塊飞涂,比如 eslintgulp 。關(guān)于使用全局模式祈搜,多數(shù)時候并不是因為許多程序都有可能用到了它较店,為了減少多重副本而使用全局模式,而是因為本地模式不會注冊 PATH 環(huán)境變量容燕。

“本地安裝” 指的是將一個模塊下載到當(dāng)前項目的 node_modules 子目錄梁呈,然后只有在項目目錄之中,才能調(diào)用這個模塊蘸秘。

本地模式和全局模式的特點如下:

模式 可通過 require 使用 注冊 PATH
本地模式
全局模式
# 本地安裝
$ npm install <package name>

# 全局安裝
$ sudo npm install -global <package name>
$ sudo npm install -g <package name>

npm install 也支持直接輸入 Github 代碼庫地址官卡。

$ npm install git://github.com/package/path.git
$ npm install git://github.com/package/path.git#0.1.0

安裝之前,npm install 會先檢查醋虏,node_modules 目錄之中是否已經(jīng)存在指定模塊寻咒。如果存在,就不再重新安裝了颈嚼,即使遠(yuǎn)程倉庫已經(jīng)有了一個新版本毛秘,也是如此。

如果你希望粘舟,一個模塊不管是否安裝過熔脂, npm 都要強制重新安裝,可以使用 -f 或 –force 參數(shù)柑肴。

$ npm install <packageName> --force

安裝不同版本

install 命令總是安裝模塊的最新版本霞揉,如果要安裝模塊的特定版本,可以在模塊名后面加上 @ 和版本號晰骑。

$ npm install sax@latest
$ npm install sax@0.1.1
$ npm install sax@">=0.1.0 <0.2.0"

install 命令可以使用不同參數(shù)适秩,指定所安裝的模塊屬于哪一種性質(zhì)的依賴關(guān)系,即出現(xiàn)在 packages.json 文件的哪一項中硕舆。

–save:模塊名將被添加到 dependencies秽荞,可以簡化為參數(shù) - S。
–save-dev:模塊名將被添加到 devDependencies抚官,可以簡化為參數(shù) - D扬跋。

$ npm install sax --save
$ npm install node-tap --save-dev
# 或者
$ npm install sax -S
$ npm install node-tap -D

dependencies 依賴

這個可以說是我們 npm 核心一項內(nèi)容,依賴管理凌节,這個對象里面的內(nèi)容就是我們這個項目所依賴的 js 模塊包钦听。下面這段代碼表示我們依賴了 markdown-it 這個包,版本是 ^8.1.0 倍奢,代表最小依賴版本是 8.1.0 朴上,如果這個包有更新,那么當(dāng)我們使用 npm install 命令的時候卒煞,npm 會幫我們下載最新的包痪宰。當(dāng)別人引用我們這個包的時候,包內(nèi)的依賴包也會被下載下來畔裕。

"dependencies": {
    "markdown-it": "^8.1.0"
}

devDependencies 開發(fā)依賴

在我們開發(fā)的時候會用到的一些包衣撬,只是在開發(fā)環(huán)境中需要用到,但是在別人引用我們包的時候柴钻,不會用到這些內(nèi)容淮韭,放在 devDependencies 的包,在別人引用的時候不會被 npm 下載贴届。

"devDependencies": {
    "autoprefixer": "^6.4.0",0",
    "babel-preset-es2015": "^6.0.0",
    "babel-preset-stage-2": "^6.0.0",
    "babel-register": "^6.0.0",
    "webpack": "^1.13.2",
    "webpack-dev-middleware": "^1.8.3",
    "webpack-hot-middleware": "^2.12.2",
    "webpack-merge": "^0.14.1",
    "highlightjs": "^9.8.0"
}

當(dāng)你有了一個完整的 package.json 文件的時候靠粪,就可以讓人一眼看出來,這個模塊的基本信息毫蚓,和這個模塊所需要依賴的包占键。我們可以通過 npm install 就可以很方便的下載好這個模塊所需要的包。

npm install 默認(rèn)會安裝 dependencies 字段和 devDependencies 字段中的所有模塊元潘,如果使用 --production 參數(shù)畔乙,可以只安裝 dependencies 字段的模塊。

$ npm install --production
# 或者
$ NODE_ENV=production npm install

一旦安裝了某個模塊翩概,就可以在代碼中用 require 命令加載這個模塊牲距。

var backbone = require('backbone')
console.log(backbone.VERSION)

npm run

npm 不僅可以用于模塊管理返咱,還可以用于執(zhí)行腳本。package.json 文件有一個 scripts 字段牍鞠,可以用于指定腳本命令咖摹,供 npm 直接調(diào)用。
package.json

{
  "name": "myproject",
  "devDependencies": {
    "jshint": "latest",
    "browserify": "latest",
    "mocha": "latest"
  },
  "scripts": {
    "lint": "jshint **.js",
    "test": "mocha test/"
  }
}

scripts 腳本

顧名思義难述,就是一些腳本代碼萤晴,可以通過 npm run script-key 來調(diào)用,例如在這個 package.json 的文件夾下使用 npm run dev 就相當(dāng)于運行了 node build/dev-server.js 這一段代碼胁后。使用 scripts 的目的就是為了把一些要執(zhí)行的代碼合并到一起店读,使用 npm run 來快速的運行,方便省事攀芯。
npm runnpm run-script 的縮寫屯断,一般都使用前者,但是后者可以更好的反應(yīng)這個命令的本質(zhì)侣诺。

// 腳本
"scripts": {
    "dev": "node build/dev-server.js",
    "build": "node build/build.js",
    "docs": "node build/docs.js",
    "build-docs": "npm run docs & git checkout gh-pages & xcopy /sy dist\\* . & git add . & git commit -m 'auto-pages' & git push & git checkout master",
    "build-publish": "rmdir /S /Q lib & npm run build &git add . & git commit -m auto-build & npm version patch & npm publish & git push",
    "lint": "eslint --ext .js,.vue src"
}

npm run 如果不加任何參數(shù)裹纳,直接運行,會列出 package.json 里面所有可以執(zhí)行的腳本命令紧武。
npm 內(nèi)置了兩個命令簡寫剃氧, npm test 等同于執(zhí)行 npm run testnpm start 等同于執(zhí)行 npm run start阻星。

"build": "npm run build-js && npm run build-css"

上面的寫法是先運行 npm run build-js 朋鞍,然后再運行 npm run build-css ,兩個命令中間用 && 連接妥箕。如果希望兩個命令同時平行執(zhí)行滥酥,它們中間可以用 & 連接。

寫在 scripts 屬性中的命令畦幢,也可以在 node_modules/.bin 目錄中直接寫成 bash 腳本坎吻。下面是一個 bash 腳本。

#!/bin/bash

cd site/main
browserify browser/main.js | uglifyjs -mc > static/bundle.js

假定上面的腳本文件名為 build.sh 宇葱,并且權(quán)限為可執(zhí)行瘦真,就可以在 scripts 屬性中引用該文件。

"build-js": "bin/build.sh"

pre- 和 post- 腳本

npm run 為每條命令提供了 pre-post- 兩個鉤子(hook)黍瞧。以 npm run lint 為例诸尽,執(zhí)行這條命令之前,npm 會先查看有沒有定義 prelint 和 postlint 兩個鉤子印颤,如果有的話您机,就會先執(zhí)行 npm run prelint,然后執(zhí)行 npm run lint,最后執(zhí)行 npm run postlint际看。

{
  "name": "myproject",
  "devDependencies": {
    "eslint": "latest"
    "karma": "latest"
  },
  "scripts": {
    "lint": "eslint --cache --ext .js --ext .jsx src",
    "test": "karma start --log-leve=error karma.config.js --single-run=true",
    "pretest": "npm run lint",
    "posttest": "echo 'Finished running tests'"
  }
}

上面代碼是一個 package.json 文件的例子咸产。如果執(zhí)行 npm test,會按下面的順序執(zhí)行相應(yīng)的命令仲闽。
1. pretest
2. test
3. posttest

如果執(zhí)行過程出錯锐朴,就不會執(zhí)行排在后面的腳本,即如果 prelint 腳本執(zhí)行出錯蔼囊,就不會接著執(zhí)行 lint 和 postlint 腳本。

npm bin

npm bin 命令顯示相對于當(dāng)前目錄的衣迷,Node 模塊的可執(zhí)行腳本所在的目錄(即 .bin 目錄)畏鼓。

# 項目根目錄下執(zhí)行
$ npm bin
./node_modules/.bin

創(chuàng)建全局鏈接

npm 提供了一個有趣的命令 npm link,它的功能是在本地包和全局包之間創(chuàng)建符號鏈接壶谒。我們說過使用全局模式安裝的包不能直接通過 require 使用云矫。但通過 npm link 命令可以打破這一限制。舉個例子汗菜,我們已經(jīng)通過 npm install -g express 安裝了 express让禀,這時在工程的目錄下運行命令:

npm link express ./node_modules/express -> /user/local/lib/node_modules/express

我們可以在 node_modules 子目錄中發(fā)現(xiàn)一個指向安裝到全局的包的符號鏈接。通過這種方法陨界,我們就可以把全局包當(dāng)做本地包來使用了巡揍。

除了將全局的包鏈接到本地以外,使用 npm link 命令還可以將本地的包鏈接到全局菌瘪。使用方法是在包目錄(package.json 所在目錄)中運行 npm link 命令腮敌。如果我們要開發(fā)一個包,利用這種方法可以非常方便地在不同的工程間進(jìn)行測試俏扩。

創(chuàng)建包

包是在模塊基礎(chǔ)上更深一步的抽象糜工,Node.js 的包類似于 C/C++ 的函數(shù)庫或者 Java、.Net 的類庫录淡。它將某個獨立的功能封裝起來捌木,用于發(fā)布、更新嫉戚、依賴管理和版本控制刨裆。Node.js 根據(jù) CommonJS 規(guī)范實現(xiàn)了包機制,開發(fā)了 npm 來解決包的發(fā)布和獲取需求彬檀。

Node.js 的包是一個目錄崔拥,其中包含了一個 JSON 格式的包說明文件 package.json。嚴(yán)格符合 CommonJS 規(guī)范的包應(yīng)該具備以下特征:

  • package.json 必須在包的頂層目錄下凤覆;
  • 二進(jìn)制文件應(yīng)該在 bin 目錄下链瓦;
  • JavaScript 代碼應(yīng)該在 lib 目錄下;
  • 文檔應(yīng)該在 doc 目錄下;
  • 單元測試應(yīng)該在 test 目錄下慈俯。

Node.js 對包的要求并沒有這么嚴(yán)格渤刃,只要頂層目錄下有 package.json,并符合一些規(guī)范即可贴膘。當(dāng)然為了提高兼容性卖子,我們還是建議你在制作包的時候,嚴(yán)格遵守 CommonJS 規(guī)范刑峡。

我們也可以把文件夾封裝為一個模塊洋闽,即所謂的包。包通常是一些模塊的集合突梦,在模塊的基礎(chǔ)上提供了更高層的抽象诫舅,相當(dāng)于提供了一些固定接口的函數(shù)庫。通過定制 package.json宫患,我們可以創(chuàng)建更復(fù)雜刊懈,更完善,更符合規(guī)范的包用于發(fā)布娃闲。

Node.js 在調(diào)用某個包時虚汛,會首先檢查包中 packgage.json 文件的 main 字段,將其作為包的接口模塊皇帮,如果 package.json 或 main 字段不存在卷哩,會嘗試尋找 index.js 或 index.node 作為包的接口。

package.json 是 CommonJS 規(guī)定的用來描述包的文件属拾,完全符合規(guī)范的 package.json 文件應(yīng)該含有以下字段:

  • name: 包的名字殉疼,必須是唯一的,由小寫英文字母捌年、數(shù)字和下劃線組成瓢娜,不能包含空格。
  • description: 包的簡要說明礼预。
  • version: 符合語義化版本識別規(guī)范的版本字符串眠砾。
  • keywords: 關(guān)鍵字?jǐn)?shù)組,通常用于搜索托酸。
  • maintainers: 維護(hù)者數(shù)組褒颈,每個元素要包含 name 、email(可選)励堡、web(可選) 字段谷丸。
  • contributors: 貢獻(xiàn)者數(shù)組,格式與 maintainers 相同应结。包的作者應(yīng)該是貢獻(xiàn)者數(shù)組的第一個元素刨疼。
  • bugs: 提交 bug 的地址泉唁,可以是網(wǎng)址或者電子郵件地址。
  • licenses: 許可證數(shù)組揩慕,每個元素要包含 type(許可證的名稱)和 url(鏈接到許可證文本的地址)字段亭畜。
  • repositories: 倉庫托管地址數(shù)組,每個元素要包含 type(倉庫的類型迎卤,如 git)拴鸵、URL(倉庫的地址)和 path(相對于倉庫的路徑,可選)字段蜗搔。
  • dependencies: 包的依賴劲藐,一個關(guān)聯(lián)數(shù)組,由包名稱和版本號組成樟凄。

包的發(fā)布

通過使用 npm init 可以根據(jù)交互式回答產(chǎn)生一個符合標(biāo)準(zhǔn)的 package.json聘芜。創(chuàng)建一個 index.js 作為包的接口, 一個簡單的包就制作完成了。

在發(fā)布前, 我們還需要獲得一個賬號用于今后維護(hù)自己的包, 使用 npm adduser 根據(jù)提示完成賬號的創(chuàng)建不同。

完成后可以使用 npm whoami 檢測是否已經(jīng)取得了賬號。

接下來溶耘,在 package.json 所在目錄下運行 npm publish二拐,稍等片刻就可以完成發(fā)布了,打開瀏覽器凳兵,訪問 http://search.npmjs.org/ 就可以找到自己剛剛發(fā)布的包了“傩拢現(xiàn)在我們可以在世界的任意一臺計算機上使用 npm install neveryumodule 命令來安裝它。

如果你的包將來有更新, 只需要在 package.json 文件中修改 version 字段庐扫,然后重新使用 npm publish 命令就行了饭望。
如果你對已發(fā)布的包不滿意,可以使用 npm unpublish 命令來取消發(fā)布形庭。

需要說明的是:json 文件不能有注釋

參考鏈接

http://javascript.ruanyifeng.com/nodejs/npm.html

我的常用命令

npm version  查看npm和node的版本
npm list --depth=0 [-g]  查看[全局]安裝的包
npm root [-g]  查看[全局的]包的安裝路徑
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末铅辞,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子萨醒,更是在濱河造成了極大的恐慌纪铺,老刑警劉巖蜜自,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡蔬捷,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進(jìn)店門挺智,熙熙樓的掌柜王于貴愁眉苦臉地迎上來扎筒,“玉大人,你說我怎么就攤上這事涣仿∏诼” “怎么了?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長埃元。 經(jīng)常有香客問我涝涤,道長,這世上最難降的妖魔是什么岛杀? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任阔拳,我火速辦了婚禮,結(jié)果婚禮上类嗤,老公的妹妹穿的比我還像新娘糊肠。我一直安慰自己,他們只是感情好遗锣,可當(dāng)我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布货裹。 她就那樣靜靜地躺著,像睡著了一般精偿。 火紅的嫁衣襯著肌膚如雪弧圆。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天笔咽,我揣著相機與錄音搔预,去河邊找鬼。 笑死叶组,一個胖子當(dāng)著我的面吹牛拯田,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播甩十,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼船庇,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了侣监?” 一聲冷哼從身側(cè)響起鸭轮,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎橄霉,沒想到半個月后张弛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡酪劫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年吞鸭,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片覆糟。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡刻剥,死狀恐怖滩字,靈堂內(nèi)的尸體忽然破棺而出造虏,到底是詐尸還是另有隱情御吞,我是刑警寧澤,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布漓藕,位于F島的核電站陶珠,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏享钞。R本人自食惡果不足惜揍诽,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望栗竖。 院中可真熱鬧暑脆,春花似錦、人聲如沸狐肢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽份名。三九已至碟联,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間僵腺,已是汗流浹背鲤孵。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留想邦,地道東北人裤纹。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓委刘,卻偏偏與公主長得像丧没,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子锡移,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,592評論 2 353