Tôi có cam kết tệp package-lock.json được tạo bởi npm 5 không?

1595
rink.attendant.6 2017-05-27 07:03.

npm 5 đã được phát hành hôm nay và một trong những tính năng mới bao gồm cài đặt xác định với việc tạo package-lock.jsontệp.

Tập tin này có phải được giữ trong kiểm soát nguồn không?

Tôi cho rằng nó tương tự như yarn.lockcomposer.lock, cả hai đều phải được giữ trong quyền kiểm soát nguồn.

11 answers

1792
vine77 2017-05-27 12:16.

Có, package-lock.jsonđược sử dụng để kiểm tra nguồn kiểm soát. Nếu bạn đang sử dụng NPM 5+, bạn có thể thấy thông báo này trên dòng lệnh: created a lockfile as package-lock.json. You should commit this file.Theo npm help package-lock.json:

package-lock.jsonđược tạo tự động cho bất kỳ hoạt động nào trong đó npm sửa đổi node_modulescây hoặc package.json. Nó mô tả cây chính xác đã được tạo, sao cho các lần cài đặt tiếp theo có thể tạo ra các cây giống hệt nhau, bất kể cập nhật phụ thuộc trung gian.

Tệp này được dự định đưa vào kho lưu trữ nguồn và phục vụ các mục đích khác nhau:

  • Mô tả một biểu diễn duy nhất của cây phụ thuộc sao cho các thành viên nhóm, triển khai và tích hợp liên tục được đảm bảo cài đặt chính xác các phụ thuộc giống nhau.

  • Cung cấp một phương tiện để người dùng "du hành thời gian" đến các trạng thái trước đó node_modulesmà không cần phải cam kết chính thư mục.

  • Để tạo điều kiện hiển thị rõ hơn các thay đổi của cây thông qua các khác biệt điều khiển nguồn có thể đọc được.

  • Và tối ưu hóa quá trình cài đặt bằng cách cho phép npm bỏ qua các độ phân giải siêu dữ liệu lặp lại cho các gói đã cài đặt trước đó.

Một chi tiết quan trọng package-lock.jsonlà nó không thể được xuất bản và nó sẽ bị bỏ qua nếu được tìm thấy ở bất kỳ nơi nào khác ngoài gói toplevel. Nó chia sẻ định dạng với npm-cowrap.json, về cơ bản là cùng một tệp, nhưng cho phép xuất bản. Điều này không được khuyến nghị trừ khi triển khai công cụ CLI hoặc sử dụng quy trình xuất bản để sản xuất các gói sản xuất.

Nếu cả hai package-lock.jsonnpm-shrinkwrap.jsonđều có trong thư mục gốc của một gói, package-lock.jsonsẽ hoàn toàn bị bỏ qua.

120
xer0x 2017-06-17 11:18.

Có, nó dự định được đăng ký. Tôi muốn đề xuất rằng nó có cam kết duy nhất của riêng nó. Chúng tôi thấy rằng nó làm tăng thêm nhiều tiếng ồn cho các khác biệt của chúng tôi.

98
k0pernikus 2019-05-23 00:14.

Có, bạn NÊN:

  1. cam kết package-lock.json.
  2. sử dụng npm cithay vìnpm install khi xây dựng ứng dụng của bạn cả trên CI và máy phát triển cục bộ của bạn

Quy npm citrình làm việc yêu cầu sự tồn tại của a package-lock.json.


Một nhược điểm lớn của npm installlệnh là hành vi không mong muốn của nó có thể làm thay đổi package-lock.json, trong khi npm cichỉ sử dụng các phiên bản được chỉ định trong tệp khóa và tạo ra lỗi

  • nếu package-lock.jsonpackage.jsonkhông đồng bộ
  • nếu package-lock.jsonthiếu a.

Do đó, chạy npm installcục bộ, đặc biệt. trong các nhóm lớn hơn với nhiều nhà phát triển, có thể dẫn đến nhiều xung đột trong nội bộ package-lock.jsonvà các nhà phát triển quyết định xóa hoàn toàn package-lock.jsonthay thế.

Tuy nhiên, có một trường hợp sử dụng mạnh mẽ để có thể tin tưởng rằng các phụ thuộc của dự án được giải quyết lặp lại theo cách đáng tin cậy trên các máy khác nhau.

Từ một package-lock.jsonbạn nhận được chính xác rằng: trạng thái đã biết để làm việc.

Trước đây, tôi đã có các dự án không có package-lock.json/ npm-shrinkwrap.json/ yarn.locktệp mà một ngày nào đó việc xây dựng sẽ không thành công vì một phụ thuộc ngẫu nhiên có bản cập nhật bị lỗi.

Những vấn đề đó rất khó giải quyết vì đôi khi bạn phải đoán phiên bản hoạt động cuối cùng là gì.

Nếu bạn muốn thêm một phụ thuộc mới, bạn vẫn chạy npm install {dependency}. Nếu bạn muốn nâng cấp, hãy sử dụng npm update {dependency}hoặc npm install ${dependendency}@{version}và cam kết thay đổi package-lock.json.

Nếu nâng cấp không thành công, bạn có thể hoàn nguyên về hoạt động gần đây nhất đã biết package-lock.json.


Để trích dẫn npm doc :

Chúng tôi thực sự khuyên bạn nên cam kết khóa gói đã tạo thành kiểm soát nguồn: điều này sẽ cho phép bất kỳ ai khác trong nhóm của bạn, các triển khai của bạn, CI / tích hợp liên tục của bạn và bất kỳ ai khác chạy cài đặt npm trong nguồn gói của bạn để có được cùng một cây phụ thuộc mà bạn đang phát triển. Ngoài ra, những điểm khác biệt so với những thay đổi này là con người có thể đọc được và sẽ thông báo cho bạn về bất kỳ thay đổi nào mà npm đã thực hiện đối với node_modules của bạn, vì vậy bạn có thể để ý xem có bất kỳ phụ thuộc bắc cầu nào được cập nhật hay không, v.v.

Và liên quan đến sự khác biệt giữa npm civsnpm install :

  • Dự án phải có package-lock.json hoặc npm-cowrap.json hiện có.
  • Nếu các phần phụ thuộc trong khóa gói không khớp với các phần trong package.json, npm cisẽ thoát ra với một lỗi, thay vì cập nhật khóa gói.
  • npm ci chỉ có thể cài đặt toàn bộ dự án cùng một lúc: không thể thêm các phần phụ thuộc riêng lẻ bằng lệnh này.
  • Nếu node_modulesđã có, nó sẽ tự động bị xóa trước khi npm cibắt đầu cài đặt.
  • Nó sẽ không bao giờ ghi vào package.jsonhoặc bất kỳ gói khóa nào: cài đặt về cơ bản bị đóng băng.

Lưu ý: Tôi đã đăng một câu trả lời tương tự ở đây

62
Xin 2018-06-15 17:23.

Có, cách tốt nhất là đăng ký (CÓ, CHECK-IN)

Tôi đồng ý rằng nó sẽ gây ra nhiều tiếng ồn hoặc xung đột khi nhìn thấy sự khác biệt. Nhưng lợi ích là:

  1. đảm bảo cùng một phiên bản chính xác của mọi gói . Phần này là quan trọng nhất khi xây dựng trong các môi trường khác nhau tại các thời điểm khác nhau. Bạn có thể sử dụng ^1.2.3trong của mình package.json, nhưng làm thế nào bạn có thể đảm bảo mỗi lần npm installsẽ chọn cùng một phiên bản trong máy phát triển của bạn và trong máy chủ xây dựng, đặc biệt là các gói phụ thuộc gián tiếp đó? Chà, package-lock.jsonsẽ đảm bảo điều đó. (Với sự trợ giúp npm cicài đặt các gói dựa trên tệp khóa)
  2. nó cải thiện quá trình cài đặt.
  3. nó giúp với tính năng kiểm tra mới npm audit fix(tôi nghĩ rằng tính năng kiểm tra là từ phiên bản npm 6).
41
Deunz 2018-07-13 04:53.

Tôi không cam kết tệp này trong các dự án của mình. Vấn đề ở đây là gì ?

  1. Nó được tạo ra
  2. Đó là nguyên nhân gây ra lỗi toàn vẹn mã SHA1 trong gitlab với các bản dựng gitlab-ci.yml

Mặc dù đúng là tôi không bao giờ sử dụng ^ trong package.json của mình cho libs vì tôi đã có những trải nghiệm tồi tệ với nó.

39
Raza 2018-06-22 21:04.

Đối với những người phàn nàn về tiếng ồn khi thực hiện git diff:

git diff -- . ':(exclude)*package-lock.json' -- . ':(exclude)*yarn.lock'

Những gì tôi đã làm là sử dụng một bí danh:

alias gd="git diff --ignore-all-space --ignore-space-at-eol --ignore-space-change --ignore-blank-lines -- . ':(exclude)*package-lock.json' -- . ':(exclude)*yarn.lock'"

Để bỏ qua package-lock.json trong các khác biệt cho toàn bộ kho lưu trữ (mọi người đang sử dụng nó), bạn có thể thêm điều này vào .gitattributes:

package-lock.json binary
yarn.lock binary

Điều này sẽ dẫn đến sự khác biệt hiển thị "Tệp nhị phân a / package-lock.json và b / package-lock.json khác nhau bất cứ khi nào tệp khóa gói được thay đổi. Ngoài ra, một số dịch vụ Git (đặc biệt là GitLab, nhưng không phải GitHub) cũng sẽ loại trừ các tệp này (không thay đổi 10k dòng nữa!) so với sự khác biệt khi xem trực tuyến khi thực hiện việc này.

19
Bablu Singh 2017-10-06 21:34.

Có, bạn có thể cam kết tệp này. Từ tài liệu chính thức của npm :

package-lock.jsonđược tạo tự động cho bất kỳ hoạt động nào npmsửa đổi node_modulescây hoặc package.json. Nó mô tả cây chính xác đã được tạo, sao cho các lần cài đặt tiếp theo có thể tạo ra các cây giống hệt nhau, bất kể cập nhật phụ thuộc trung gian.

Tập tin này được dự định sẽ được chuyển vào kho lưu trữ nguồn [.]

9
Balogun Ridwan Ridbay 2018-10-27 07:01.

Tắt package-lock.json trên toàn cầu

nhập thông tin sau vào thiết bị đầu cuối của bạn:

npm config set package-lock false

điều này thực sự hiệu quả với tôi như một phép thuật

6
Nikhil Mohadikar 2019-05-29 00:45.

Có, đó là một thông lệ tiêu chuẩn để cam kết package-lock.json

Lý do chính để cam kết package-lock.json là mọi người trong dự án đều sử dụng cùng một phiên bản gói.

Ưu điểm: -

  • Nếu bạn tuân theo việc lập phiên bản nghiêm ngặt và không cho phép tự động cập nhật lên các phiên bản chính để tránh những thay đổi không tương thích ngược trong các gói của bên thứ ba thì việc khóa gói sẽ giúp ích rất nhiều.
  • Nếu bạn cập nhật một gói cụ thể, nó sẽ được cập nhật trong package-lock.json và mọi người sử dụng kho lưu trữ sẽ được cập nhật lên phiên bản cụ thể đó khi họ thực hiện các thay đổi của bạn.

Nhược điểm: -

  • Nó có thể làm cho các yêu cầu kéo của bạn trông xấu xí :) '

Chỉnh sửa: - cài đặt npm sẽ không đảm bảo rằng mọi người trong dự án đều sử dụng cùng một phiên bản gói. npm ci sẽ giúp bạn với điều này.

2
MagicLAMP 2019-01-09 17:15.

Việc sử dụng npm của tôi là để tạo css / js được rút gọn / chưa được xác minh và để tạo javascript cần thiết trong các trang được cung cấp bởi ứng dụng django. Trong các ứng dụng của tôi, Javascript chạy trên trang để tạo hoạt ảnh, đôi khi thực hiện lệnh gọi ajax, hoạt động trong khuôn khổ VUE và / hoặc làm việc với css. Nếu package-lock.json có một số kiểm soát ghi đè những gì có trong package.json, thì có thể cần phải có một phiên bản của tệp này. Theo kinh nghiệm của tôi, nó không ảnh hưởng đến những gì được cài đặt bởi npm install, hoặc nếu có, nó không ảnh hưởng xấu đến các ứng dụng mà tôi triển khai theo hiểu biết của tôi. Tôi không sử dụng mongodb hoặc các ứng dụng khác như ứng dụng mỏng truyền thống.

Tôi xóa package-lock.json khỏi repo vì npm install tạo tệp này và npm install là một phần của quá trình triển khai trên mỗi máy chủ chạy ứng dụng. Việc kiểm soát phiên bản của nút và npm được thực hiện thủ công trên mỗi máy chủ, nhưng tôi cẩn thận rằng chúng giống nhau.

Khi npm installđược chạy trên máy chủ, nó sẽ thay đổi package-lock.json và nếu có các thay đổi đối với tệp được kho lưu trên máy chủ ghi lại, lần triển khai tiếp theo WONT cho phép bạn kéo các thay đổi mới từ nguồn gốc. Đó là bạn không thể triển khai vì pull sẽ ghi đè các thay đổi đã được thực hiện đối với package-lock.json.

Bạn thậm chí không thể ghi đè package-lock.json được tạo cục bộ bằng những gì có trên repo (đặt lại bản gốc gốc cứng), vì npm sẽ phàn nàn khi bạn đưa ra lệnh nếu package-lock.json không phản ánh những gì có trong node_modules do cài đặt npm, do đó phá vỡ triển khai. Bây giờ nếu điều này cho thấy rằng các phiên bản hơi khác nhau đã được cài đặt trong node_modules, một lần nữa điều đó chưa bao giờ gây ra sự cố cho tôi.

Nếu node_modules không có trên repo của bạn (và không nên như vậy), thì package-lock.json nên được bỏ qua.

Nếu tôi thiếu điều gì đó, vui lòng sửa cho tôi trong phần nhận xét, nhưng quan điểm là việc lập phiên bản được lấy từ tệp này không có ý nghĩa gì. Tệp package.json có số phiên bản trong đó và tôi giả sử tệp này là tệp được sử dụng để xây dựng gói khi xảy ra cài đặt npm, vì khi tôi xóa nó, npm install phàn nàn như sau:

[email protected]:introcart_wagtail$ rm package.json
[email protected]:introcart_wagtail$ npm install
npm WARN saveError ENOENT: no such file or directory, open '/home/jason/webapps/introcart_devtools/introcart_wagtail/package.json'

và bản dựng không thành công, tuy nhiên khi cài đặt node_modules hoặc áp dụng npm để xây dựng js / css, không có khiếu nại nào được thực hiện nếu tôi xóa package-lock.json

[email protected]:introcart_wagtail$ rm package-lock.json 
[email protected]:introcart_wagtail$ npm run dev

> [email protected] dev /home/jason/webapps/introcart_devtools/introcart_wagtail
> NODE_ENV=development webpack --progress --colors --watch --mode=development

 10% building 0/1 modules 1 active ...
1
A-312 2020-07-07 22:38.

Tất cả các câu trả lời đều nói "CÓ" nhưng điều đó cũng phụ thuộc vào dự án, bác sĩ nói:

Một chi tiết quan trọng về package-lock.json là nó không thể được xuất bản và nó sẽ bị bỏ qua nếu được tìm thấy ở bất kỳ nơi nào khác ngoài gói toplevel.

Điều này có nghĩa là bạn không cần phải xuất bản trên npm của mình package-lock.jsonđể phụ thuộc nhưng bạn cần sử dụng package-lock.jsontrong kho của mình để khóa phiên bản của phụ thuộc thử nghiệm của bạn, xây dựng phụ thuộc…

Tuy nhiên, nếu bạn đang sử dụng lerna để quản lý các dự án với nhiều gói, bạn nên đặt gói package.jsonduy nhất trên thư mục gốc của repo, không phải trong mỗi gói con được tạo bằng npm init. Bạn sẽ nhận được một cái gì đó như thế:

.git
lerna.json
package.json
package-lock.json        <--- here
packages/a/package.json
packages/a/lib/index.js
packages/b/package.json
packages/b/lib/index.js

Related questions

MORE COOL STUFF

Cate Blanchett chia tay chồng sau 3 ngày bên nhau và vẫn kết hôn với anh ấy 25 năm sau

Cate Blanchett chia tay chồng sau 3 ngày bên nhau và vẫn kết hôn với anh ấy 25 năm sau

Cate Blanchett đã bất chấp những lời khuyên hẹn hò điển hình khi cô gặp chồng mình.

Tại sao Michael Sheen là một diễn viên phi lợi nhuận

Tại sao Michael Sheen là một diễn viên phi lợi nhuận

Michael Sheen là một diễn viên phi lợi nhuận nhưng chính xác thì điều đó có nghĩa là gì?

Hallmark Star Colin Egglesfield Các món ăn gây xúc động mạnh đối với người hâm mộ tại RomaDrama Live! [Loại trừ]

Hallmark Star Colin Egglesfield Các món ăn gây xúc động mạnh đối với người hâm mộ tại RomaDrama Live! [Loại trừ]

Ngôi sao của Hallmark Colin Egglesfield chia sẻ về những cuộc gặp gỡ với người hâm mộ ly kỳ tại RomaDrama Live! cộng với chương trình INSPIRE của anh ấy tại đại hội.

Tại sao bạn không thể phát trực tuyến 'chương trình truyền hình phía Bắc'

Tại sao bạn không thể phát trực tuyến 'chương trình truyền hình phía Bắc'

Bạn sẽ phải phủi sạch đầu đĩa Blu-ray hoặc DVD để xem tại sao Northern Exposure trở thành một trong những chương trình nổi tiếng nhất của thập niên 90.

Where in the World Are You? Take our GeoGuesser Quiz

Where in the World Are You? Take our GeoGuesser Quiz

The world is a huge place, yet some GeoGuessr players know locations in mere seconds. Are you one of GeoGuessr's gifted elite? Take our quiz to find out!

8 công dụng tuyệt vời của Baking Soda và Giấm

8 công dụng tuyệt vời của Baking Soda và Giấm

Bạn biết đấy, hai sản phẩm này là nguồn điện để làm sạch, riêng chúng. Nhưng cùng với nhau, chúng có một loạt công dụng hoàn toàn khác.

Hạn hán, biến đổi khí hậu đe dọa tương lai của thủy điện Hoa Kỳ

Hạn hán, biến đổi khí hậu đe dọa tương lai của thủy điện Hoa Kỳ

Thủy điện rất cần thiết cho lưới điện của Hoa Kỳ, nhưng nó chỉ tạo ra năng lượng khi có nước di chuyển. Bao nhiêu nhà máy thủy điện có thể gặp nguy hiểm khi các hồ và sông cạn kiệt?

Quyên góp tóc của bạn để giúp giữ nước sạch của chúng tôi

Quyên góp tóc của bạn để giúp giữ nước sạch của chúng tôi

Tóc tỉa từ các tiệm và các khoản quyên góp cá nhân có thể được tái sử dụng như những tấm thảm thấm dầu và giúp bảo vệ môi trường.

Đây là Tổng thống Trump đe dọa 'trợ cấp' xe điện của GM vì đóng cửa nhà máy

Đây là Tổng thống Trump đe dọa 'trợ cấp' xe điện của GM vì đóng cửa nhà máy

Trump và Giám đốc điều hành GM Mary Barra vào năm 2017. Kể từ khi tin tức nổ ra ngày hôm qua rằng General Motors đang cắt giảm việc làm ở Bắc Mỹ để chuẩn bị cho tương lai điện / xe tự hành / khủng khiếp có thể xảy ra của chúng tôi, gần như tất cả mọi người đã tự hỏi: Tổng thống Trump, người đã vận động tranh cử trên một nền tảng sẽ như thế nào của việc mang lại và duy trì việc làm ô tô của Mỹ, phải nói gì về điều này? Bây giờ chúng ta biết.

Bản vá lỗi tiếp theo của Fallout 76 sẽ mang lại một số bản sửa lỗi cần thiết

Bản vá lỗi tiếp theo của Fallout 76 sẽ mang lại một số bản sửa lỗi cần thiết

Bethesda cho biết ngày hôm nay trên Reddit, Fallout 76 sẽ có một bản vá lớn khác vào ngày 4 tháng 12, sẽ bắt đầu cố gắng khắc phục một số vấn đề lớn hơn của trò chơi. Ngoài ra, công ty cho biết họ có kế hoạch giao tiếp nhiều hơn trong tương lai về những gì nhóm Fallout 76 đang làm việc và khi nào các bản cập nhật mới cho trò chơi sẽ ra mắt.

Mạng lưới bệnh viện Công giáo sẽ không cho phép nhân viên phá thai tại phòng khám ngoài giờ làm việc

Mạng lưới bệnh viện Công giáo sẽ không cho phép nhân viên phá thai tại phòng khám ngoài giờ làm việc

Bạn có biết rằng một trong sáu bệnh nhân ở bệnh viện ở Hoa Kỳ được điều trị tại một cơ sở Công giáo? Và bạn có biết rằng quyền sở hữu của Công giáo hạn chế sâu sắc việc thiết lập các thủ tục y tế có thể được thực hiện trong các bệnh viện này, rõ ràng nhất là khi nói đến chăm sóc sức khỏe sinh sản? Bây giờ NPR báo cáo rằng sự gia tăng của các bệnh viện thuộc Công giáo đang gây khó khăn hơn cho các bác sĩ — những người bị cấm bởi các quy định do Hoa Kỳ viết.

Khói từ đám cháy rừng ở California đã đến tận thành phố New York

Khói từ đám cháy rừng ở California đã đến tận thành phố New York

Đường chân trời San Francisco bị che khuất bởi khói và khói mù do cháy rừng phía sau Đảo Alcatraz, Thứ Tư, ngày 14 tháng 11 năm 2018, ở San Francisco.

Nicky Hilton Forced to Borrow Paris' 'I Love Paris' Sweatshirt After 'Airline Loses All [My] Luggage'

Nicky Hilton Forced to Borrow Paris' 'I Love Paris' Sweatshirt After 'Airline Loses All [My] Luggage'

Nicky Hilton Rothschild's luggage got lost, but luckily she has an incredible closet to shop: Sister Paris Hilton's!

Kate Middleton dành một ngày bên bờ nước ở London, cùng với Jennifer Lopez, Julianne Hough và hơn thế nữa

Kate Middleton dành một ngày bên bờ nước ở London, cùng với Jennifer Lopez, Julianne Hough và hơn thế nữa

Kate Middleton dành một ngày bên bờ nước ở London, cùng với Jennifer Lopez, Julianne Hough và hơn thế nữa. Từ Hollywood đến New York và mọi nơi ở giữa, hãy xem các ngôi sao yêu thích của bạn đang làm gì!

17 tuổi bị đâm chết trong khi 4 người khác bị thương trong một cuộc tấn công bằng dao trên sông Wisconsin

17 tuổi bị đâm chết trong khi 4 người khác bị thương trong một cuộc tấn công bằng dao trên sông Wisconsin

Các nhà điều tra đang xem xét liệu nhóm và nghi phạm có biết nhau trước vụ tấn công hay không

Thanh thiếu niên, Gia đình Florida Hội đồng quản trị trường học về Luật 'Không nói đồng tính': 'Buộc chúng tôi tự kiểm duyệt'

Thanh thiếu niên, Gia đình Florida Hội đồng quản trị trường học về Luật 'Không nói đồng tính': 'Buộc chúng tôi tự kiểm duyệt'

Vụ kiện, nêu tên một số học khu, lập luận rằng dự luật "Không nói đồng tính" được ban hành gần đây của Florida "có hiệu quả im lặng và xóa bỏ học sinh và gia đình LGBTQ +"

Đường băng hạ cánh

Đường băng hạ cánh

Cuối hè đầu thu là mùa hoài niệm. Những chiếc đèn đường chiếu ánh sáng của chúng qua những con đường đẫm mưa, và những chiếc lá dưới chân - màu đỏ cam tắt trong bóng chạng vạng - là lời nhắc nhở về những ngày đã qua.

Hãy tưởng tượng tạo ra một chiến lược nội dung thực sự CHUYỂN ĐỔI. Nó có thể.

Hãy tưởng tượng tạo ra một chiến lược nội dung thực sự CHUYỂN ĐỔI. Nó có thể.

Vào năm 2021, tôi khuyến khích bạn suy nghĩ lại mọi thứ bạn biết về khách hàng mà bạn phục vụ và những câu chuyện bạn kể cho họ. Lùi lại.

Sự mất mát của voi ma mút đã mở ra trái tim tôi để yêu

Sự mất mát của voi ma mút đã mở ra trái tim tôi để yêu

Vào ngày sinh nhật thứ 9 của Felix The Cat, tôi nhớ về một trong những mất mát lớn nhất trong cuộc đời trưởng thành của tôi - Sophie của tôi vào năm 2013. Tôi đã viết bài luận này và chia sẻ nó trên nền tảng này một thời gian ngắn vào năm 2013.

Khi bạn không thể trở thành người mà Internet muốn bạn trở thành

Khi bạn không thể trở thành người mà Internet muốn bạn trở thành

Tôi ghét từ "tàu đắm". Mọi người cảm thấy thoải mái trong la bàn đạo đức của riêng mình, và khi làm như vậy, họ thấy mình vượt qua sự phán xét.

Language