Tổng hợp Postcss-url
Đứng lên. bài đăng này được viết vào năm 2016 và một số công cụ và giá có thể đã thay đổi. Mã vẫn hoạt động, nhưng bạn có thể muốn tìm hướng dẫn cập nhật hơn Show
Trong phần đầu tiên của loạt bài này, chúng tôi đã giới thiệu quá trình thiết lập Rollup làm công cụ xây dựng giao diện người dùng cho JavaScript Bài viết này bao gồm các phần hai và ba Đầu tiên, chúng ta sẽ tiếp tục làm việc với dự án đó trong Phần II để thêm hỗ trợ cho việc xử lý biểu định kiểu thông qua Rollup, sử dụng PostCSS để chạy một số biến đổi và cho phép chúng ta sử dụng đường cú pháp như cú pháp biến đơn giản hơn và các quy tắc lồng nhau Sau đó, chúng tôi sẽ kết thúc với Phần III, nơi chúng tôi sẽ thêm tính năng xem tệp và tải lại trực tiếp vào dự án để chúng tôi không phải tạo lại gói theo cách thủ công bất cứ khi nào tệp được thay đổi điều kiện tiên quyết
GHI CHÚ. Nếu bạn không có bản sao của dự án, bạn có thể sao chép dự án ở cuối Phần I bằng cách sử dụng lệnh này. 8Điều hướng sê-ri
Phần II. Cách sử dụng tổng số. js cho dự án tiếp theo của bạn. đăngCSSMột phần khác của Rollup rất hay, tùy thuộc vào cách thiết lập dự án của bạn, là bạn có thể dễ dàng xử lý CSS và đưa nó vào 9 của tài liệuVề mặt tích cực, điều này giữ tất cả các bước xây dựng của bạn ở một nơi, giúp giảm bớt sự phức tạp trong quá trình phát triển của chúng tôi — đó là một trợ giúp lớn, đặc biệt nếu chúng tôi đang làm việc theo nhóm Nhưng mặt khác, chúng tôi đang làm cho các biểu định kiểu của mình dựa trên JavaScript và tạo một đoạn HTML chưa định kiểu ngắn trước khi các kiểu được đưa vào. Vì vậy, cách tiếp cận này có thể không hợp lý đối với một số dự án và cần được cân nhắc với các cách tiếp cận như sử dụng PostCSS riêng biệt Tuy nhiên, vì bài viết này là về Rollup. chết tiệt. Hãy sử dụng Rollup Bước 0. Tải biểu định kiểu trong // Rollup plugins import babel from 'rollup-plugin-babel'; import eslint from 'rollup-plugin-eslint'; import resolve from 'rollup-plugin-node-resolve'; import commonjs from 'rollup-plugin-commonjs'; import replace from 'rollup-plugin-replace'; import uglify from 'rollup-plugin-uglify'; + import postcss from 'rollup-plugin-postcss'; export default { entry: 'src/scripts/main.js', dest: 'build/js/main.min.js', format: 'iife', sourceMap: 'inline', plugins: [ + postcss({ + extensions: [ '.css' ], + }), resolve({ jsnext: true, main: true, browser: true, }), commonjs(), eslint({ exclude: [ 'src/styles/**', ] }), babel({ exclude: 'node_modules/**', }), replace({ ENV: JSON.stringify(process.env.NODE_ENV || 'development'), }), (process.env.NODE_ENV === 'production' && uglify()), ], };0Điều này hơi thú vị nếu bạn chưa bao giờ sử dụng công cụ xây dựng trước đây, nhưng hãy gắn bó với tôi. Để sử dụng các kiểu của chúng ta trong tài liệu, chúng ta sẽ không sử dụng thẻ 1 như bình thường; Ngay trên đầu của 4, tải biểu định kiểu
Bước 1. Cài đặt PostCSS làm plugin RollupĐiều đầu tiên chúng ta cần là plugin Rollup's PostCSS, vì vậy hãy cài đặt plugin đó bằng cách sau
Bước 2. Cập nhật // Rollup plugins import babel from 'rollup-plugin-babel'; import eslint from 'rollup-plugin-eslint'; import resolve from 'rollup-plugin-node-resolve'; import commonjs from 'rollup-plugin-commonjs'; import replace from 'rollup-plugin-replace'; import uglify from 'rollup-plugin-uglify'; + import postcss from 'rollup-plugin-postcss'; export default { entry: 'src/scripts/main.js', dest: 'build/js/main.min.js', format: 'iife', sourceMap: 'inline', plugins: [ + postcss({ + extensions: [ '.css' ], + }), resolve({ jsnext: true, main: true, browser: true, }), commonjs(), eslint({ exclude: [ 'src/styles/**', ] }), babel({ exclude: 'node_modules/**', }), replace({ ENV: JSON.stringify(process.env.NODE_ENV || 'development'), }), (process.env.NODE_ENV === 'production' && uglify()), ], };5Tiếp theo, hãy thêm plugin vào 5 của chúng tôi
Hãy xem gói được tạoBây giờ chúng tôi có thể xử lý biểu định kiểu, chúng tôi có thể tạo lại gói và xem tất cả điều này hoạt động như thế nào Chạy 7, sau đó xem gói được tạo tại 8, ngay gần trên cùng. Bạn sẽ thấy một chức năng mới có tên là 9 5Tóm lại, chức năng này tạo một phần tử 50, đặt biểu định kiểu làm nội dung của nó và nối phần tử đó vào phần tử 51 của tài liệuNgay bên dưới phần khai báo hàm, chúng ta có thể thấy rằng nó được gọi với kiểu đầu ra bởi PostCSS. Khá hấp dẫn, phải không? Ngoại trừ hiện tại, những phong cách đó không thực sự được xử lý; . Vì vậy, hãy thêm các plugin PostCSS mà chúng tôi cần để làm cho biểu định kiểu của chúng tôi hoạt động trong các trình duyệt mục tiêu của chúng tôi Bước 3. Cài đặt các plugin PostCSS cần thiếtTôi yêu PostCSS. Tôi bắt đầu ở trại LESS, thấy mình ít nhiều bị ép buộc vào trại Sass khi mọi người từ bỏ LESS, và sau đó vô cùng hạnh phúc khi biết rằng PostCSS tồn tại Tôi thích nó vì nó cho phép tôi truy cập vào các phần của LESS và Sass mà tôi thích — lồng nhau, các biến đơn giản — và không giúp tôi tiếp cận các phần của LESS và Sass mà tôi cho là hấp dẫn và nguy hiểm,1 như các toán tử logic Một trong những điều mà tôi thích nhất về nó là việc sử dụng các plugin, thay vì một cấu trúc ngôn ngữ tổng thể có tên là “PostCSS”. Chúng tôi chỉ có thể chọn các tính năng mà chúng tôi thực sự sẽ sử dụng — và quan trọng hơn, chúng tôi có thể loại bỏ các tính năng mà chúng tôi không muốn sử dụng Vì vậy, trong dự án của chúng tôi, chúng tôi sẽ chỉ sử dụng bốn phần bổ trợ — hai phần bổ trợ cho đường cú pháp, một phần bổ trợ để hỗ trợ các tính năng CSS mới trong các trình duyệt cũ hơn và một phần bổ trợ để nén và thu nhỏ biểu định kiểu kết quả
Để cài đặt các plugin này, hãy sử dụng lệnh này 6Bước 4. Cập nhật // Rollup plugins import babel from 'rollup-plugin-babel'; import eslint from 'rollup-plugin-eslint'; import resolve from 'rollup-plugin-node-resolve'; import commonjs from 'rollup-plugin-commonjs'; import replace from 'rollup-plugin-replace'; import uglify from 'rollup-plugin-uglify'; + import postcss from 'rollup-plugin-postcss'; export default { entry: 'src/scripts/main.js', dest: 'build/js/main.min.js', format: 'iife', sourceMap: 'inline', plugins: [ + postcss({ + extensions: [ '.css' ], + }), resolve({ jsnext: true, main: true, browser: true, }), commonjs(), eslint({ exclude: [ 'src/styles/**', ] }), babel({ exclude: 'node_modules/**', }), replace({ ENV: JSON.stringify(process.env.NODE_ENV || 'development'), }), (process.env.NODE_ENV === 'production' && uglify()), ], };5Tiếp theo, hãy đưa các plugin PostCSS của chúng ta vào 5 bằng cách thêm thuộc tính 62 vào đối tượng cấu hình 63 1GHI CHÚ. Chúng tôi chuyển 64 thành 65 vì cả nó và 66 đều sử dụng Autoprefixer, điều này sẽ kích hoạt cảnh báo. Thay vì vật lộn với cấu hình, chúng tôi sẽ chỉ biết rằng nó đang được chạy hai lần (trong trường hợp này là vô hại) và tắt cảnh báoKiểm tra đầu ra trong npm install --save-dev rollup-plugin-postcss51Với các plugin được cài đặt, chúng tôi có thể xây dựng lại gói của mình (_______27) và mở 69 trong trình duyệt của mình. Chúng ta sẽ thấy rằng trang hiện đã được tạo kiểu và nếu kiểm tra tài liệu, chúng ta có thể thấy biểu định kiểu đã được đưa vào phần đầu, được nén và thu nhỏ cùng với tất cả các tiền tố của nhà cung cấp và các tính năng khác mà chúng ta mong đợi từ PostCSSBiểu định kiểu được xử lý bởi PostCSS và được bổ sung bởi RollupTuyệt quá. Vì vậy, bây giờ chúng tôi có một quá trình xây dựng khá vững chắc. JavaScript của chúng tôi được đóng gói, mã không sử dụng bị xóa và đầu ra được nén và thu nhỏ, đồng thời các biểu định kiểu của chúng tôi được PostCSS xử lý và đưa vào đầu Tuy nhiên, vẫn hơi khó chịu khi phải xây dựng lại gói theo cách thủ công mỗi khi chúng tôi thực hiện thay đổi. Vì vậy, trong phần tiếp theo, chúng tôi sẽ Rollup xem các tệp của chúng tôi để biết các thay đổi và tải lại trình duyệt bất cứ khi nào một tệp được thay đổi Phần III. Cách sử dụng tổng số. js cho dự án tiếp theo của bạn. Tải lại trực tiếpTại thời điểm này, dự án của chúng tôi đã kết hợp thành công JavaScript và biểu định kiểu, nhưng đây vẫn là một quy trình thủ công. Và vì mọi bước thủ công trong một quy trình đều có rủi ro thất bại cao hơn so với bước tự động — và vì thật khó chịu khi phải chạy 7 mỗi khi chúng tôi thay đổi tệp — nên chúng tôi muốn tự động xây dựng lại góiGHI CHÚ. Nếu bạn không có bản sao của dự án, bạn có thể sao chép dự án ở cuối Phần II bằng cách sử dụng lệnh này. 11Bước 0. Thêm plugin đồng hồ vào RollupMột công cụ phát triển phổ biến khi làm việc với Node. js là một người theo dõi. Điều này có thể quen thuộc nếu bạn đã từng làm việc với webpack, Grunt, Gulp và các công cụ xây dựng khác trong quá khứ Trình theo dõi là một quy trình chạy trong khi bạn làm việc trên một dự án và khi bạn thay đổi tệp trong bất kỳ thư mục nào mà nó đang theo dõi, nó sẽ kích hoạt một hành động. Trong trường hợp các công cụ xây dựng, hành động phổ biến nhất là kích hoạt quá trình xây dựng lại Trong dự án của chúng tôi, chúng tôi muốn xem thư mục 12 để biết bất kỳ thay đổi tệp nào và khi các thay đổi được phát hiện, chúng tôi muốn kích hoạt tạo gói mới từ RollupĐể làm điều đó, chúng tôi sẽ sử dụng plugin 13, hơi khác một chút so với các plugin Rollup khác mà chúng tôi đã sử dụng cho đến nay — nhưng sẽ nói thêm về điều đó một chút. Hãy bắt đầu bằng cách cài đặt plugin 2Bước 1. Chạy Tổng số với cờ // Rollup plugins import babel from 'rollup-plugin-babel'; import eslint from 'rollup-plugin-eslint'; import resolve from 'rollup-plugin-node-resolve'; import commonjs from 'rollup-plugin-commonjs'; import replace from 'rollup-plugin-replace'; import uglify from 'rollup-plugin-uglify'; + import postcss from 'rollup-plugin-postcss'; export default { entry: 'src/scripts/main.js', dest: 'build/js/main.min.js', format: 'iife', sourceMap: 'inline', plugins: [ + postcss({ + extensions: [ '.css' ], + }), resolve({ jsnext: true, main: true, browser: true, }), commonjs(), eslint({ exclude: [ 'src/styles/**', ] }), babel({ exclude: 'node_modules/**', }), replace({ ENV: JSON.stringify(process.env.NODE_ENV || 'development'), }), (process.env.NODE_ENV === 'production' && uglify()), ], };14Sự khác biệt giữa 13 và các plugin Rollup khác là chúng tôi không phải thực hiện bất kỳ thay đổi nào đối với 5 để sử dụng nóThay vào đó, chúng tôi thêm một cờ vào lệnh đầu cuối của mình 6Sau khi chạy lệnh, chúng ta thấy một đầu ra khác trong bảng điều khiển 7Quá trình vẫn hoạt động và hiện đang theo dõi các thay đổi Vì vậy, nếu chúng tôi thực hiện một thay đổi nhỏ đối với 17 - chẳng hạn như thêm nhận xét - ngay sau khi chúng tôi lưu nó, một gói mới sẽ được tạoKhi trình theo dõi đang chạy, các thay đổi sẽ kích hoạt quá trình xây dựng lại. Kẻ nói dối bắt lỗi ngay lập tức. Gọn gàng nhỉ?Đây là một bước tiết kiệm thời gian lớn trong quá trình phát triển, nhưng chúng ta có thể tiến thêm một bước nữa. Ngay bây giờ, chúng tôi vẫn phải làm mới trình duyệt để xem gói được cập nhật — vì vậy, hãy thêm một công cụ để tự động làm mới trình duyệt khi gói của chúng tôi được cập nhật TIỀN BOA. Để dừng quá trình xem, nhấn 18 trong cửa sổ terminalBước 2. Cài LiveReload để refresh trình duyệt tự độngMột công cụ phổ biến để tăng tốc độ phát triển là LiveReload. Đây là một quá trình chạy trong nền và yêu cầu trình duyệt làm mới bất cứ khi nào một tệp mà nó đang xem bị thay đổi Để bắt đầu, chúng ta cần cài đặt plugin 0Bước 3. Chèn tập lệnh LiveReload vào dự ánTrước khi LiveReload có thể hoạt động, chúng tôi cần đưa vào trang của mình một tập lệnh nói chuyện với máy chủ LiveReload Vì điều này chỉ bắt buộc trong quá trình phát triển, nên chúng tôi sẽ tận dụng lợi thế của các biến môi trường để chỉ chèn tập lệnh nếu chúng tôi không ở chế độ 19Trong 17, thêm vào như sau 0Lưu tệp sau khi bạn đã thực hiện các thay đổi và bây giờ chúng tôi đã sẵn sàng dùng thử GHI CHÚ. Việc hiểu cách thức hoạt động của máy chủ LiveReload không quan trọng, nhưng phiên bản ngắn gọn là quy trình dòng lệnh theo dõi các thay đổi của tệp, sau đó gửi một thông báo bằng cách sử dụng websockets tới tập lệnh phía máy khách, tập lệnh này sẽ kích hoạt tải lại Bước 4. Chạy LiveReloadVới LiveReload được cài đặt và tập lệnh được đưa vào tài liệu của chúng tôi, chúng tôi có thể kích hoạt nó để xem thư mục 21 của chúng tôi 1GHI CHÚ. Lý do chúng tôi đang xem 21 là chúng tôi chỉ cần xây dựng lại khi có gói mớiĐiều này dẫn đến đầu ra tương tự như sau 2Và nếu chúng tôi mở trình duyệt của mình để xem 69 — hãy đảm bảo làm mới trang sau khi bắt đầu LiveReload để đảm bảo kết nối ổ cắm đang hoạt động — chúng tôi có thể thấy rằng việc thực hiện thay đổi thành 69 sẽ tự động tải lại trình duyệt và hiển thị cho chúng tôi các thay đổi của chúng tôiThay đổi tệp kích hoạt tải lại trình duyệtĐiều này thật tuyệt, nhưng chúng tôi vẫn còn một chút khó khăn. ngay bây giờ, chúng tôi chỉ có thể chạy chức năng xem của Rollup hoặc LiveReload trừ khi chúng tôi mở nhiều phiên cuối. Đó không phải là lý tưởng. Trong hai bước tiếp theo, chúng tôi sẽ tạo một giải pháp thay thế cho vấn đề đó Bước 5. Sử dụng tập lệnh // Rollup plugins import babel from 'rollup-plugin-babel'; import eslint from 'rollup-plugin-eslint'; import resolve from 'rollup-plugin-node-resolve'; import commonjs from 'rollup-plugin-commonjs'; import replace from 'rollup-plugin-replace'; import uglify from 'rollup-plugin-uglify'; + import postcss from 'rollup-plugin-postcss'; export default { entry: 'src/scripts/main.js', dest: 'build/js/main.min.js', format: 'iife', sourceMap: 'inline', plugins: [ + postcss({ + extensions: [ '.css' ], + }), resolve({ jsnext: true, main: true, browser: true, }), commonjs(), eslint({ exclude: [ 'src/styles/**', ] }), babel({ exclude: 'node_modules/**', }), replace({ ENV: JSON.stringify(process.env.NODE_ENV || 'development'), }), (process.env.NODE_ENV === 'production' && uglify()), ], };25 để đơn giản hóa quá trình khởi độngCho đến giờ trong phần hướng dẫn này, chúng ta đã phải nhập đường dẫn đầy đủ đến tập lệnh 26, mà - tôi chắc rằng bây giờ bạn đã nhận thấy - là một điều khó hiểuVì điều này và vì công cụ chúng tôi sẽ sử dụng để chạy đồng thời xem và LiveReload, chúng tôi sẽ thêm cả lệnh 26 và lệnh 28 làm tập lệnh trong 25Mở 25 — nó nằm trong thư mục gốc của thư mục dự án 61. Bên trong, bạn sẽ thấy như sau 3Xem tài sản 62 đó?
Thêm phần sau vào 25 4Các tập lệnh này cho phép chúng tôi sử dụng phím tắt để thực thi tập lệnh mà chúng tôi chọn Để chạy Rollup, bây giờ chúng ta có thể sử dụng 64Để chạy LiveReload, chúng ta có thể sử dụng 65Tất cả những gì còn lại bây giờ là để cả hai chạy cùng nhau Bước 6. Cài đặt một công cụ để chạy song song trình theo dõi và LiveReloadĐể cả Rollup và LiveReload hoạt động cùng lúc, chúng ta sẽ sử dụng một tiện ích có tên là 66Đây là một công cụ mạnh mẽ, vì vậy chúng tôi sẽ không nói về mọi thứ mà nó có thể làm. Mục đích chúng tôi đang sử dụng là khả năng chạy song song các tập lệnh — nghĩa là cả hai tập lệnh đều chạy cùng lúc trong cùng một phiên cuối Bắt đầu bằng cách cài đặt 66 5Tiếp theo, chúng ta cần thêm một tập lệnh nữa vào 25 gọi 66. Trong khối 62, hãy thêm phần sau (lưu ý rằng tôi đã bỏ qua phần lớn tệp cho ngắn gọn) 6Lưu các thay đổi của bạn, sau đó chuyển đến thiết bị đầu cuối. Chúng tôi đã sẵn sàng cho bước cuối cùng Bước 7. Chạy tập lệnh // Rollup plugins import babel from 'rollup-plugin-babel'; import eslint from 'rollup-plugin-eslint'; import resolve from 'rollup-plugin-node-resolve'; import commonjs from 'rollup-plugin-commonjs'; import replace from 'rollup-plugin-replace'; import uglify from 'rollup-plugin-uglify'; + import postcss from 'rollup-plugin-postcss'; export default { entry: 'src/scripts/main.js', dest: 'build/js/main.min.js', format: 'iife', sourceMap: 'inline', plugins: [ + postcss({ + extensions: [ '.css' ], + }), resolve({ jsnext: true, main: true, browser: true, }), commonjs(), eslint({ exclude: [ 'src/styles/**', ] }), babel({ exclude: 'node_modules/**', }), replace({ ENV: JSON.stringify(process.env.NODE_ENV || 'development'), }), (process.env.NODE_ENV === 'production' && uglify()), ], };71 cuối cùngĐó là nó. Chúng ta làm được rồi Trong thiết bị đầu cuối của bạn, hãy chạy như sau 7Sau đó tải lại trình duyệt của bạn, thực hiện thay đổi trong CSS hoặc JS và xem trình duyệt làm mới với gói cập nhật — tất cả đều giống như phép thuật LiveReload + rebundling tự động giống như ma thuậtBây giờ chúng tôi là bậc thầy Rollup. Các gói mã của chúng tôi sẽ nhỏ hơn và nhanh hơn, đồng thời quy trình phát triển của chúng tôi sẽ nhanh chóng và dễ dàng Đọc thêm
chú thích
|