Menggunakan webpack dengan yang ada PHP dan JS proyek
Saya ada proyek PHP dengan jquery dan bootstrap, tidak menggunakan front-end framework.
Saya mencoba untuk menggunakan webpack modul bundler dalam rangka untuk membuat satu entry point untuk proyek sumber daya, mengelola js dependensi dengan node js package manager, menjalankan tugas sebagai minify js, css, image re-ukuran...dll. Dan meningkatkan browser loading waktu yang dibutuhkan untuk memuat satu halaman.
Saya datang di webpack tutorial dan harus instal dan menginstal dev-server, tapi masalahnya adalah bahwa saya tidak dapat memahami bagaimana aku akan mengkonversi semua saya saat ini script js dan css link di proyek (di mana saya memiliki banyak jquery dan CSS perpustakaan yang digunakan untuk menyediakan beberapa fitur dalam proyek) untuk menggunakan webpack.
Apakah saya harus menulis ulang semua saya JS dan CSS file dalam cara yang sesuai dengan webpack? Bagaimana cara melakukan migrasi sukses?
Selain itu, saya tidak dapat menjalankan saya saat ini aplikasi php pada webpack dev-server, itu dimaksudkan untuk berjalan di sana di tempat pertama? Hanya daftar direktori proyek sementara.
Saya telah menciptakan sebuah tes index.js
file dan digunakan berikut webpack konfigurasi:
var path = require('path');
var webpack = require('webpack');
module.exports =
{
entry: [
'./public/js/index.js',
'webpack/hot/dev-server',
'webpack-dev-server/client?http://localhost:8080'
],
plugins: [
new webpack.HotModuleReplacementPlugin()
],
output: {
path: path.join(__dirname, "public/dist/js"),
publicPath : "http://localhost:8080/my_proj/public/dist/js",
filename: "bundle.js"
}
};
Saya menambahkan bundle.js
saya script beban hanya untuk pengujian sebagai berikut berharap bahwa aplikasi ini akan berjalan pada webpack dev-server:
<script type="text/javascript" src="public/dist/js/bundle.js"></script>
<script type="text/javascript" src="public/js/jquery.min.js"></script>
<script type="text/javascript" src="public/js/jquery.migrate.js"></script>
<script type="text/javascript" src="public/js/jquery.bxslider.min.js"></script>
<script type="text/javascript" src="public/js/jquery.appear.js"></script>
<script type="text/javascript" src="public/js/jquery.countTo.js"></script>
<script type="text/javascript" src="public/js/bootstrap.js"></script>
Harap membantu saya memahami konsep di sini dan bagaimana saya bisa membuat migrasi ini berhasil?
Pertama, untuk menjawab pertanyaan-pertanyaan kecil:
Tidak, anda tidak't harus menulis ulang aset-aset anda. Mungkin. Melihat CSS dan Kasus Tepi bagian di bawah ini.
Disclaimer: I'll hanya mengambil sebagian kecil dari pertanyaan anda. Ruang lingkup yang terlalu luas untuk dikemas menjadi salah satu StackOverflow menjawab. Aku hanya akan berhubungan dengan
Persyaratan
Saya asumsikan anda telah Node.js dan npm diinstal pada mesin anda, dan kira-kira tahu bagaimana menggunakannya. Saya juga berasumsi bahwa anda memiliki
webpack
danwebpack-cli
dipasang sebagai (dev) dependensi dari proyek anda (bukan hanya secara global):Paket ini memungkinkan kita untuk dengan dalam menggabungkan beberapa webpack konfigurasi. Kita ingin menggunakannya untuk membuat webpack konfigurasi tergantung pada lingkungan kami saat ini.
Mengatur konfigurasi anda
Sekarang menyesuaikan
build/config.base.js
:File tidak jelas hanya mengekspor objek kosong sekarang, tapi kami'll perlu bahwa untuk langkah-langkah berikut. Letakkan kode ini di anda
build/config.production.js
:Dan hampir sama dengan kode yang masuk ke anda
build/config.development.js
:Saya kira itu's cukup intuitif ini: Menggunakan webpack dengan
config.development.js
konfigurasi akan mengambil konfigurasi umum dan menggabungkan sendiri config deklarasi di....and vice versa for the
produksi
lingkungan. Perintah itu agak kikuk untuk menggunakan, tapi jangan khawatir, kami'll alamat nanti.Membuat beberapa file helper
Ada informasi yang kami'll ingin memusatkan untuk membuat mereka dengan mudah dapat ditukar. Path File yang seperti itu. Jadi let's ekstrak mereka. Membuat
paths.js
dalammembangun
folder dan telah mengekspor beberapa jalan kita'll ingin digunakan kemudian:Buat alias
Seperti disebutkan di atas, kita bisa menjalankan secara teknis kami membangun jaringan dalam
pembangunan
modus seperti ini:Yang's tidak nyaman verbose perintah, jadi let's perubahan itu. It's cara yang lebih nyaman untuk menjalankan proses membangun melalui
npm
script. Tambahkan salah satu script per lingkungan untuk andapaket.json
seperti ini:Sekarang anda dapat menjalankan anda membangun rantai dengan
npm menjalankan dev
resp.npm menjalankan prod
– yang jauh lebih mudah untuk menghafal dan lebih cepat untuk mengetik. ...begitu ada'es apa-apa untuk membangun, tentu saja.Bundel JavaScript
Oke, itu sebenarnya cukup banyak bekerja tanpa mencapai terlalu banyak sejauh ini. Jadi let's mulai dengan sesuatu yang lebih menarik: Kita'll menentukan JavaScript entry point.
Menentukan entry point
Masukan kode berikut ke dalam file
build/config.base.js
(mengganti kode yang ada seluruhnya):Buat file JavaScript
Konfigurasi di atas mengharapkan
index.js
tinggal diSRC/js
folder (seperti yang didefinisikan dalambuild/paths.js
). Let's buat file dengan isi sebagai berikut:Seperti yang anda lihat,
index.js
hanya impor semua file yang ingin anda gunakan. Jika anda sekarang jalankandari terminal anda, sebuah
scripts.js
file yang akan dibuat diDIST
folder. Anda dapat menyertakan yang menjadi markup anda dengan plain ol'<script>
tag. Selamat, anda've got a kerja webpack setup!Menyelam lebih dalam
Ini mini-tutorial benar-benar hanya tergores permukaan dari apa yang dapat anda lakukan dengan webpack. Ini memberi anda cukup solid foundation untuk konfigurasi anda yang sekarang anda dapat mengisi dengan apa pun yang anda butuhkan. Dan itu akan benar-benar cukup banyak hal. I'll daftar beberapa hal anda mungkin ingin meningkatkan, dengan beberapa link untuk membaca.
webpack Konsep
Jika anda ingin menggunakan webpack, hal ini dapat sulit untuk melakukannya jika anda don't tahu tentang konsep dasar. Juho Vepsäläperancis dibuat sebuah panduan tentang cara memulai dengan webpack yang membantu saya banyak. Dia's juga webpack core kontributor sehingga anda dapat yakin dia tahu apa yang dia's berbicara tentang. Terutama loader adalah konsep anda'll benar-benar butuhkan ** untuk tahu. Banyak petunjuk pada daftar ini juga dijelaskan di sana. Baca lebih lanjut: SurviveJS – webpack tutorial
Kode Membelah
Itu tidak apa nama's mengatakan: Anda mungkin tidak ingin pack semua JavaScript anda ke dalam satu besar file output. It's pekerjaan webpack tidak bagi anda untuk memisahkan bagian-bagian dari bundel yang anda hanya perlu pada halaman tertentu dari aplikasi anda. Juga, tergantung pada seberapa sering anda're bekerja pada proyek anda's JavaScript, itu mungkin ide yang baik untuk memisahkan kode pihak ketiga dari bundel anda untuk tujuan caching. Baca lebih lanjut: webpack Dokumentasi – Kode Membelah
Caching
Anda mungkin ingin meningkatkan situs anda's caching perilaku dengan menambahkan hash untuk anda dibundel nama file yang tergantung pada konten mereka. Ini akan membuat (misalnya) a
script.31aa1d3cad014475a618.js
bukannyascripts.js
. File yang kemudian dapat di-cache tanpa batas waktu karena begitu isinya berubah, nama file akan berubah juga. Kode PHP anda mungkin kemudian menggunakanwebpack-nyata-plugin
untuk mendapatkan akses ke nama file yang dihasilkan. Baca lebih lanjut:chunkhash
pada cara untuk memanjakan anda bundel nama-nama file dengan hashwebpack-nyata-plugin
pada cara untuk menghasilkanterwujud.json
yang berisi nama file anda saat ini bundelTranspiling
Dalam kasus anda ingin menggunakan modern ES2015 kode di situs anda's JavaScript (dan menargetkan non-evergreen browser), anda'll ingin transpile mereka turun ke reguler ES5. (Jika istilah "ES2015" tidak masuk akal untuk anda, anda're kemungkinan besar tidak menggunakan itu dan dapat mengabaikan ayat ini.) Baca lebih lanjut:
babel-loader
– loader yang berjalan Babel pada script andaCSS
Ada webpack loader untuk CSS. Dan Sass. Dan PostCSS. Apa pun yang anda butuhkan. Dan karena anda're mungkin tidak berencana untuk menyertakan CSS anda melalui
<script>
kategori, mengenal Ekstrak Teks Plugin untuk menghasilkan yang sebenarnya `.css file.jika anda output path
publik/dist/css/bundel.css
, akan diubah:Baca lebih lanjut:
ekstrak-teks-webpack-plugin
Minifying
Live Reload
Masalah anda dengan live reload punya cukup sederhana penyebab: webpack dev server adalah hanya sederhana Node.js server hanya melayani file statis. Untuk anda're kasus,
webpack-dev-server
mungkin adalah alat yang salah sama sekali. Mencobawebpack-livereload-plugin
bukan untuk hidup reloader bahwa anda hanya dapat memiliki melalui<script>
tag. Baca lebih lanjut:webpack-livereload-plugin
Sumber Peta
Kode ini di dataran file JavaScript akan membuat
myFunc
yang tersedia di mana-mana di kode JS. Tapi sejak webpack bundel kode dibungkus dalam fungsi callback (dan dengan demikian meninggalkan lingkup global), tidak ada't akan ada akses ke fungsi itu lagi. Perpustakaan pihak ketiga seharusnya tidak menjadi masalah di sana, mereka biasanya menetapkan mereka globals untukjendela
objek secara langsung, tetapi jika anda've sudah tertulis kode JS dalam proyek anda, anda harus menyadari bahwa.Mengotomatisasi!
Anda'll ingin mengotomatisasi banyak dari alur kerja anda sebagai mungkin. Pertimbangkan untuk menjalankan
npm menjalankan prod
melalui git hook sebelum mendorong / setelah menarik.Semoga ini bisa membantu.
Berdasarkan ada vue-template dan dan jawaban dari @Loilo saya membuat vue template yang anda dapat menginstal dengan
vue-cli
. Template ini jumpstarts anda untuk melihat aplikasi anda dapat memperpanjang dengan atau mengintegrasikan dalam anda lingkungan yang ada.devwatch:
Template ini memiliki tambahan menjalankan devwatch pilihan jam tangan untuk filechanges alih-alih menggunakan webpack-dev-server. Ini membuatnya dapat digunakan untuk apapun yang ada webserver lingkungan.
dev:
untuk menjalankan itu dengan default webpack-dev-server, hapus
<script src="http://localhost:35729/livereload.js"></script>
diindex.html
:membangun:
untuk membangun proyek anda untuk produksi: