Mengoptimumkan pembangunan WordPress dengan Grunt
Dalam tutorial ini, kami akan mempelajari cara menggunakan Grunt secara khusus untuk membantu dan mempercepatkan aliran kerja pembangunan WordPress anda.
Grunt ialah pelari tugas JavaScript yang dipasang melalui NPM dan berjalan pada pelayan anda. Untuk menggunakan maklumat dalam tutorial ini, anda memerlukan akses baris arahan ke pelayan. Demi ringkasnya, saya mengesyorkan anda merujuk kepada tutorial ini untuk mendapatkan Grunt, berjalan dan sedia untuk digunakan.
Grunt ialah pelari tugas yang terbukti yang boleh digunakan dalam pelbagai cara pada pelbagai platform yang berbeza. Di sini, kita akan melihat untuk menentukan asas kukuh pembangunan WordPress.
Tugas biasa
Komuniti Grunt sangat kuat, yang telah membawa kepada pembangunan katalog besar pemalam. Sangat mudah untuk tersesat dan menghabiskan banyak masa mencari dan menyemak yang mana untuk digunakan.
Jadi apakah beberapa tugas biasa yang perlu dicapai atau disediakan oleh tema atau pemalam WordPress?
- Setempatkan rentetan bahasa menggunakan ciri terjemahan WordPress
- Pengurusan fail aset. Iaitu, menggunakan versi fail JavaScript dan CSS yang dibangunkan dan diperkecil.
Penyetempatan
Grunt mempunyai pakej penyetempatan khusus WordPress yang sangat berjaya dipanggil grunt-wp-i18n. Pakej Grunt ini tidak ternilai kerana ia akan mengimbas folder tema/plugin anda untuk semua rentetan terjemahan dan menyusun fail .pot
di lokasi yang ditentukan. Fail .pot
ini kemudiannya boleh digunakan untuk menukar .po
dan .mo
fail , supaya pengguna lain boleh menterjemah tema/pemalam anda.
.pot
文件。然后可以使用此 .pot
文件转换 .po
和 .mo
文件,以便其他用户翻译您的主题/插件。
要配置包,请将以下内容添加到 Gruntfile.js
initConfig
选项中:
makepot: { target: { options: { include: [ 'path/to/some/file.php' ], type: 'wp-plugin' // or `wp-theme` } } }
然后像这样调用 Grunt 任务(在 Gruntfile.js
文件夹中):
grunt makepot
正在扫描您的整个文件夹,并且所有字符串都符合 pot 文件。
资产文件
所有主题和插件都定期使用 JavaScript 和 CSS 文件。不幸的是,很多时候对文件的开发和生产版本的需求被忽视。
根据 WordPress 本身的提示,我的目标是确保我已完全评论并缩小了文件:
文件名.js
文件名.min.js
文件名.css
文件名.min.css
要在没有某种形式的任务运行程序的情况下执行此操作,意味着在开发过程中切换在 WordPress 中注册的资产 URL 以查看更改后的未缩小版本,在发布更新之前使用某种形式的 JavaScript 和 CSS 压缩器,然后切换返回已注册的 URL。这一点也不好玩。
借助 Grunt,您可以使用 Uglify 包动态缩小和优化 JavaScript 文件,为了进一步使用 CSS,我们还可以使用 Sass 任务将 Sass 文件动态编译为 CSS。就其价值而言,我使用 Sass,因为 WordPress 在底层使用的是 Sass,但 Grunt 也有一个 LESS 编译器。
uglify: { dist: { options: { banner: '/*! <%= pkg.name %> <%= pkg.version %> filename.min.js <%= grunt.template.today("yyyy-mm-dd h:MM:ss TT") %> */\n', report: 'gzip' }, files: { 'assets/js/filename.min.js' : [ 'assets/path/to/file.js', 'assets/path/to/another/file.js', 'assets/dynamic/paths/**/*.js' ] } }, dev: { options: { banner: '/*! <%= pkg.name %> <%= pkg.version %> filename.js <%= grunt.template.today("yyyy-mm-dd h:MM:ss TT") %> */\n', beautify: true, compress: false, mangle: false }, files: { 'assets/js/filename.js' : [ 'assets/path/to/file.js', 'assets/path/to/another/file.js', 'assets/dynamic/paths/**/*.js' ] } } }
sass: { dist: { options: { banner: '/*! <%= pkg.name %> <%= pkg.version %> filename.min.css <%= grunt.template.today("yyyy-mm-dd h:MM:ss TT") %> */\n', style: 'compressed' }, files: [{ expand: true, cwd: 'assets/scss', src: [ '*.scss' ], dest: 'assets/css', ext: '.min.css' }] }, dev: { options: { banner: '/*! <%= pkg.name %> <%= pkg.version %> filename.css <%= grunt.template.today("yyyy-mm-dd h:MM:ss TT") %> */\n', style: 'expanded' }, files: [{ expand: true, cwd: 'assets/scss', src: [ '*.scss' ], dest: 'assets/css', ext: '.css' }] } }
提示:如果使用 sass 任务,请将 <i>.sass-cache</i>
添加到 <i>.gitignore</i>
以防止将编译器缓存添加到您的存储库中。
高级任务
我们已经介绍了 Grunt 可以帮助 WordPress 开发的两个关键领域,但让我们更进一步,看看使用任务运行程序的额外功能。
查看文件
我们已经提供了处理文件的任务,为什么不对其进行优化呢?通过上面的任务,我们每次进行更改时都需要运行 grunt ***
Untuk mengkonfigurasi pakej, tambahkan yang berikut pada pilihan Gruntfile.js
initConfig
:
grunt watch
Kemudian panggil tugas Grunt (dalam folder Gruntfile.js
) seperti ini:
jshint: { files: [ 'assets/js/filename.js', 'assets/dynamic/paths/**/*.js' ], options: { expr: true, globals: { jQuery: true, console: true, module: true, document: true } } }
Seluruh folder anda sedang diimbas dan semua rentetan sepadan dengan fail periuk.
Fail Aset
Semua tema dan pemalam kerap menggunakan fail JavaScript dan CSS. Malangnya, banyak kali keperluan untuk pembangunan dan versi pengeluaran fail diabaikan.
Mengikuti petua dari WordPress sendiri, matlamat saya adalah untuk memastikan saya telah mengulas sepenuhnya dan mengecilkan fail:
Nama fail.js
Nama fail.min.js
Nama fail.css
🎜
🎜Nama fail.min.css
🎜
assets/ ├── js/ | ├── filename.js ├── fields/ ├── text/ | ├── js/ | ├── text.js ├── select/ ├── js/ ├── select.js
uglify: { dist: { options: { banner: '/*! <%= pkg.name %> <%= pkg.version %> filename.min.js <%= grunt.template.today("yyyy-mm-dd h:MM:ss TT") %> */\n', report: 'gzip' }, files: { 'assets/js/filename.min.js' : [ 'assets/path/to/file.js', 'assets/path/to/another/file.js', 'assets/dynamic/paths/**/*.js' ] } }, dev: { options: { banner: '/*! <%= pkg.name %> <%= pkg.version %> filename.js <%= grunt.template.today("yyyy-mm-dd h:MM:ss TT") %> */\n', beautify: true, compress: false, mangle: false }, files: { 'assets/js/filename.js' : [ 'assets/path/to/file.js', 'assets/path/to/another/file.js', 'assets/dynamic/paths/**/*.js' ] } } }
<i>.sass-cache</i>
pada < kelas kod =" inline"><i>.gitignore</i> untuk menghalang cache pengkompil daripada ditambahkan pada repositori anda. 🎜
🎜Tugas lanjutan🎜
🎜Kami telah merangkumi dua bidang utama di mana Grunt boleh membantu dengan pembangunan WordPress, tetapi mari kita melangkah lebih jauh dan melihat keupayaan tambahan menggunakan pelari tugas. 🎜
🎜Lihat fail🎜
🎜Kami sudah menyediakan tugas untuk memproses fail, mengapa tidak mengoptimumkannya? Dengan tugasan di atas, kita perlu menjalankan grunt ***
setiap kali kami membuat perubahan, mengapa tidak memasang pakej grunt-contrib-watch? Setelah dikonfigurasikan, ini akan mengarahkan Grunt untuk menjalankan tugas ini setiap kali perubahan fail dikesan. 🎜
copy: { dist: { src: 'readme.txt', dest: 'README.md' } }
curl: { 'google-fonts-source': { src: 'https://www.googleapis.com/webfonts/v1/webfonts?key=*******', dest: 'assets/vendor/google-fonts-source.json' } }
phpdocumentor: { dist: { options: { ignore: 'node_modules' } } }
从用户的角度来看,我只想提供一个 JavaScript 文件,其中包含所有常见的和基于字段的 JavaScript。让我们使用 grunt-contrib-uglify 任务来完成此任务。
uglify: { dist: { options: { banner: '/*! <%= pkg.name %> <%= pkg.version %> filename.min.js <%= grunt.template.today("yyyy-mm-dd h:MM:ss TT") %> */\n', report: 'gzip' }, files: { 'assets/js/filename.min.js' : [ 'assets/path/to/file.js', 'assets/path/to/another/file.js', 'assets/dynamic/paths/**/*.js' ] } }, dev: { options: { banner: '/*! <%= pkg.name %> <%= pkg.version %> filename.js <%= grunt.template.today("yyyy-mm-dd h:MM:ss TT") %> */\n', beautify: true, compress: false, mangle: false }, files: { 'assets/js/filename.js' : [ 'assets/path/to/file.js', 'assets/path/to/another/file.js', 'assets/dynamic/paths/**/*.js' ] } } }
通过此配置,通过 JSHint 后,会将所有 JavaScript 文件合并为开发文件和生产文件。
复制文件
WordPress.org 需要 Readme.txt
文件来详细说明主题/插件信息,但 GitHub 和 BitBucket 等版本控制系统更喜欢 Readme.md
文件。我们不需要手动复制或保持这些文件同步。让 Grunt 帮我们做这件事吧!
安装 grunt-contrib-copy 任务并按如下方式配置:
copy: { dist: { src: 'readme.txt', dest: 'README.md' } }
下载数据
另一个有用的 Grunt 任务是 Grunt cURL 包。 Fluent 框架字段之一需要访问 Google Fonts API 数据。按照 Google 的建议加载此内容将是每次加载页面时的 HTTP 请求。或者,如果您手动复制文件内容,则可能会面临过时的风险。两全其美的方法是使用 Grunt Curl 来保存请求并获取更新。
为了保持最新状态,我们只需加载 cURL 任务,为其提供从中获取字体数据的 URL 以及保存响应的位置。
curl: { 'google-fonts-source': { src: 'https://www.googleapis.com/webfonts/v1/webfonts?key=*******', dest: 'assets/vendor/google-fonts-source.json' } }
现在,每次我们运行任务时,都会下载最新的字体列表,并将其保存到框架文件中。
文档
此任务最适合用于许多开发人员都会窥探的主题、插件和框架。对于那些探索代码库的人来说,上下文从来都不是坏事。
PHP Documentor 是一个用于自动生成该数据的出色工具。它还可以帮助您专注于在代码中提供有意义的 DocBlock。
phpdocumentor: { dist: { options: { ignore: 'node_modules' } } }
提示:将 <i>docs</i>
添加到您的 <i>.gitignore </i>
如果您不想提交文档及其所有缓存文件。
把它们放在一起
这是用于执行上述任务的 package.json
和 Gruntfile.js
。
package.json
{ "name": "package-name", "version": "1.0.0", "description": "...", "main": "filename.php", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "repository": { "type": "git", "url": "http://repo-url.com" }, "keywords": [ "wordpress" ], "author": "Your Name", "license": "GPL", "devDependencies": { "grunt": "~0.4.2", "grunt-contrib-copy": "~0.5.0", "grunt-contrib-jshint": "~0.8.0", "grunt-contrib-sass": "^0.7.3", "grunt-contrib-uglify": "~0.3.3", "grunt-curl": "*", "grunt-phpdocumentor": "~0.4.1", "grunt-wp-i18n": "~0.4.0" } }
Gruntfile.js
module.exports = function(grunt) { grunt.initConfig({ pkg: grunt.file.readJSON('package.json'), copy: { dist: { src: 'readme.txt', dest: 'README.md' } }, curl: { 'google-fonts-source': { src: 'https://www.googleapis.com/webfonts/v1/webfonts?key=*******', dest: 'assets/vendor/google-fonts-source.json' } }, makepot: { target: { options: { include: [ 'path/to/some/file.php' ], type: 'wp-plugin' // or `wp-theme` } } }, jshint: { files: [ 'assets/js/filename.js', 'assets/dynamic/paths/**/*.js' ], options: { expr: true, globals: { jQuery: true, console: true, module: true, document: true } } }, phpdocumentor: { dist: { options: { ignore: 'node_modules' } } }, sass: { dist: { options: { banner: '/*! <%= pkg.name %> <%= pkg.version %> filename.min.css <%= grunt.template.today("yyyy-mm-dd h:MM:ss TT") %> */\n', style: 'compressed' }, files: [{ expand: true, cwd: 'assets/scss', src: [ '*.scss' ], dest: 'assets/css', ext: '.min.css' }] }, dev: { options: { banner: '/*! <%= pkg.name %> <%= pkg.version %> filename.css <%= grunt.template.today("yyyy-mm-dd h:MM:ss TT") %> */\n', style: 'expanded' }, files: [{ expand: true, cwd: 'assets/scss', src: [ '*.scss' ], dest: 'assets/css', ext: '.css' }] } }, uglify: { dist: { options: { banner: '/*! <%= pkg.name %> <%= pkg.version %> filename.min.js <%= grunt.template.today("yyyy-mm-dd h:MM:ss TT") %> */\n', report: 'gzip' }, files: { 'assets/js/filename.min.js' : [ 'assets/path/to/file.js', 'assets/path/to/another/file.js', 'assets/dynamic/paths/**/*.js' ] } }, dev: { options: { banner: '/*! <%= pkg.name %> <%= pkg.version %> filename.js <%= grunt.template.today("yyyy-mm-dd h:MM:ss TT") %> */\n', beautify: true, compress: false, mangle: false }, files: { 'assets/js/filename.js' : [ 'assets/path/to/file.js', 'assets/path/to/another/file.js', 'assets/dynamic/paths/**/*.js' ] } } } }); grunt.loadNpmTasks('grunt-contrib-copy'); grunt.loadNpmTasks('grunt-contrib-jshint'); grunt.loadNpmTasks('grunt-contrib-sass'); grunt.loadNpmTasks('grunt-contrib-uglify'); grunt.loadNpmTasks('grunt-curl'); grunt.loadNpmTasks('grunt-phpdocumentor'); grunt.loadNpmTasks('grunt-wp-i18n'); grunt.registerTask('default', [ 'jshint', 'uglify:dev', 'uglify:dist', 'sass:dev', 'sass:dist', 'makepot', 'copy' ]); grunt.registerTask('docs', [ 'phpdocumentor:dist' ]); grunt.registerTask('googlefonts', [ 'curl:google-fonts-source' ]); };
提示:添加 <i>node_modules</i>
和 <i>npm-debug .log</i>
到您的 class="inline"><i>.gitignore</i> 以防止任务作为关联文件添加到您的存储库中。
结论
正如您从上面的任务中看到的,Grunt 可用于帮助自动化 WordPress 开发,让您有更多时间专注于编写代码,而不是管理代码。
我们只详细介绍了 WordPress 的一些任务,但还有许多其他软件包可以满足项目特定需求,例如图像优化任务等等,所以去探索吧!
Grunt 现在是一个完善的任务运行器,并且文档与 WordPress 本身相当,为什么不考虑制作一个尚未想到的任务并与社区分享呢?
资源
- 咕噜声
- Node.js
- Grunt 入门
使用的 Grunt 任务
- JSHint 咕噜
- 咕噜丑化
- 咕噜萨斯
- 咕噜WPi18n
- 咕噜手表
- 咕噜复制
- Grunt PHP 文档编写器
- 咕噜卷曲
Atas ialah kandungan terperinci Mengoptimumkan pembangunan WordPress dengan Grunt. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Artikel membincangkan membuat, menerbitkan, dan mengekalkan perpustakaan JavaScript, memberi tumpuan kepada perancangan, pembangunan, ujian, dokumentasi, dan strategi promosi.

Artikel ini membincangkan strategi untuk mengoptimumkan prestasi JavaScript dalam pelayar, memberi tumpuan kepada mengurangkan masa pelaksanaan dan meminimumkan kesan pada kelajuan beban halaman.

Soalan dan penyelesaian yang sering ditanya untuk percetakan tiket kertas terma depan dalam pembangunan front-end, percetakan tiket adalah keperluan umum. Walau bagaimanapun, banyak pemaju sedang melaksanakan ...

Artikel ini membincangkan debugging JavaScript yang berkesan menggunakan alat pemaju pelayar, memberi tumpuan kepada menetapkan titik putus, menggunakan konsol, dan menganalisis prestasi.

Tidak ada gaji mutlak untuk pemaju Python dan JavaScript, bergantung kepada kemahiran dan keperluan industri. 1. Python boleh dibayar lebih banyak dalam sains data dan pembelajaran mesin. 2. JavaScript mempunyai permintaan yang besar dalam perkembangan depan dan stack penuh, dan gajinya juga cukup besar. 3. Faktor mempengaruhi termasuk pengalaman, lokasi geografi, saiz syarikat dan kemahiran khusus.

Artikel ini menerangkan cara menggunakan peta sumber untuk debug JavaScript minifikasi dengan memetakannya kembali ke kod asal. Ia membincangkan membolehkan peta sumber, menetapkan titik putus, dan menggunakan alat seperti Chrome Devtools dan Webpack.

Perbincangan mendalam mengenai punca-punca utama perbezaan dalam output konsol.log. Artikel ini akan menganalisis perbezaan hasil output fungsi Console.log dalam sekeping kod dan menerangkan sebab -sebab di belakangnya. � ...

Bagaimana cara menggabungkan elemen array dengan ID yang sama ke dalam satu objek dalam JavaScript? Semasa memproses data, kita sering menghadapi keperluan untuk mempunyai id yang sama ...
