Node Webpack
سرویس NPM به شما این قابلیت را میدهد تا بتوانید به آسانی از پکیج های آماده Javascript و css استفاده کنید. البته استفاده از پکیج های آماده در سایت ها به راحتی نبوده و مشکلات مربوط به خود را دارد. از جمله این مشکلات تغییر نسخه های پکیج ها و یا بارگزاری تعداد فایل های زیاد در صفحه هستند که باعث افت سرعت و همچنین افت رتبه سایت میشود.
مدیریت پکیج ها
در جالنو برای مدیریت پکیج های هر قالب این امکان فراهم شده است تا پکیج های مورد نیاز را در فایل معرفی قالب با نام theme.json
و در قسمت assets
معرفی کنید. در زمان معرفی میتوانید نسخه ی پکیج مورد نیاز را نیز ذخیره کنید تا در نصب های بعدی دقیقا همان پکیج نصب شود.
با استفاده از این قابلیت دیگر نیاز نیست تا در زمان جابه جایی سایت، فایل های پکیج ها ( که حجم زیادی خواهند داشت ) را نیز جابه جا کنید. میتوانید به راحتی و بعد از جابه جایی مجددا اقدام به نصب آنها کنید.
پکیج node_webpack به صورت خودکار تمامی قالب ها را شناسایی و پکیج های مورد نیاز و معرفی شده هر قالب را در مسیر همان قالب نصب میکند.
نمونه فایل معرفی قالب
{
"name" : "clipone",
"title":"Clip One",
"assets":[
{"type": "package", "name": "bootstrap", "version": "^3.3.7"},
{"type": "package", "name": "jquery", "version": "^3.4.1"},
{"type": "package", "name": "jquery-ui", "version": "^1.12.1"},
{"type": "package", "name": "jquery.growl", "version": "^1.3.5"}
]
}
معرفی نسخه ها
نسخه های معرفی شده دقیقا از قواعد NPM پیروی کرده و باید این قاعده توسط این سرویس قابل شناسایی باشد. چنانچه نسخه ی معرفی نشود، آخرین نسخه از پکیج همیشه نصب میشود و اگر نسخه ی معرفی شده معتبر نباشد، در زمان اجرا و نصب پکیج ها خطا دریافت خواهید کرد.
نمونه | توضیح |
---|---|
~3.3.7 | نسخه ی 3.3.7 و یا یکی از نسخه هایی که دو رقم ابتدایی حتما 3.3 و رقم سوم آن از 7 بزرگتر است نصب شود. |
=3.3.7 | دقیقا نسخه ی 3.3.7 نصب شود. |
^3.3.7 یا 3.3.7 | نسخه ی 3.3.7 و یا یکی از نسخه هایی که رقم ابتدایی آنها حتما 3، رقم دوم آن 3 و یا بزرگتر و رقم سوم آن از 7 بزرگتر است نصب شود. |
ولی هنوز مشکل تعداد فایل های زیادی که باید در زمان اجرای صفحه بارگزاری شوند، وجود دارد. در Node Webpack این مشکل نیز قابل حل است.
مدیریت فایل ها
بعد از نصب و برای استفاده از پکیج ها باید فایل های پکیج ها قبل از فایل شما در صفحه بارگزاری شده باشند تا شما بتوانید از آن استفاده کنید. در هر صفحه باید این مورد رعایت شده و فایل های مورد نیاز در آن صفحه با رعایت اولویت بندی تماما معرفی شوند.
همچنین نمیتوانید از تکنولوژی های راحت تر و سریع تر مانند Typescript، Less و یا SCSS استفاده کنید چرا که این موارد توسط موتور های مرورگر ها شناسایی نشده و باید به تکنولوژی های دیگر تبدیل و کامپایل شوند.
اما در جالنو میتوانید بدون نگرانی بابت این مسائل فقط بر روی مسائل سایت خودتان تمرکز کنید. در Node Webpack تمامی پکیج های استفاده شده در کدها و یا فایل های معرفی شده در فایل معرفی قالب ها به صورت یک فایل به تکنولوژی های مرورگر تبدیل و کامپایل میشوند.
نمونه فایل معرفی قالب
{
"name" : "clipone",
"title":"Clip One",
"assets":[
{"type": "package", "name": "bootstrap", "version": "^3.3.7"},
{"type": "package", "name": "jquery", "version": "^3.4.1"},
{"type": "css", "file": "node_modules/bootstrap/dist/css/bootstrap.css"},
// or
// {"type": "less", "file": "node_modules/bootstrap/less/bootstrap.less"},
{"type": "less", "file": "assets/less/Main.less"},
{"type": "js", "file": "node_modules/bootstrap/dist/js/bootstrap.min.js"}
{"type": "js", "file": "assets/js/Main.js"}
]
}
نمونه فایل Main.less
@import "~bootstrap/less/bootstrap.less"; // Import installed package less file instead write in theme.json
@import "fonts.less"; // Import other less file
body {
font-size: 16px;
lineheight: 1.4;
}
@import "responsive.less"; // Import other less file
نمونه فایل Main.js
jQuery(function() {
alert("Hello World!");
$("#div").html("Hi");
}(JQuery, this);
میتوانید بدون مشکل از $ برای استفاده از jquery استفاده نمایید.
برای استفاده از تکنولوژی Typescript میبایست ابتدا در شاخه اصلی قالب تنظیمات TS را در فایلی با نام tsconfig.json
ذخیره کنید.
نمونه فایل تنظیمات TS
{
"compilerOptions": {
"module": "commonjs",
"target": "es5",
"sourceMap": false,
"removeComments": true
},
"files": [
"./assets/ts/Main.ts"
]
}
نمونه فایل TS
import * as $ from "jquery";
import "bootstrap" // Import bootstrap js file instead write in theme.json
import NotFound from "./NotFound.ts";
export default class Main {
public static init() {
alert("Hello World!");
$("#div").html("Hi");
NotFound.initIfNeeded();
}
}
$(() => {
Main.init();
});
چون تمامی فایل ها در قالب یک فایل اجرا میشوند، پس ممکن هست تا کدهای نوشته شده برای یک صفحه در صفحه ی دیگری به اشتباه بارگزاری و تاثیر گذار باشد؛ پس باید هر فایل را به آن صفحه محدود کنید.
نمونه فایل TS مخصوص یک صفحه
import * as $ from "jquery";
export default class NotFound {
public static initIfNeeded() {
NotFound.$page = $("body.notfound-page");
if (NotFound.$page.length) {
NotFound.init();
}
}
private static $body: JQuery;
private static init() {
alert("NotFound Page!");
}
}
البته که استفاده از شئ گرایی در Typescript وجود داشته و در این مثال ها چون نیاز نبوده استفاده نشده است. فایل
نصب پکیج ها
در محیط خط فرمان به مسیر packages/node_webpack/nodejs
بروید. در این مکان دستور زیر را اجرا و منتظر بمانید:
$ npm install -- --install
با اجرای دست ور بالا تمامی قالب ها شناسایی و پکیج های مورد نیاز نصب میشوند.
اجرای webpack
در محیط خط فرمان به مسیر packages/node_webpack/nodejs
بروید. در این مکان دستور زیر را اجرا و منتظر بمانید:
$ npm install -- --webpack
بعد از اتمام دستور، فایل های نهایی در مسیر node_webpack/storage/public/frontend/dist
ذخیره میشوند. این فایل ها به صو رت خودکار توسط فرم ورک شناسایی و در صفحه قرار داده میشوند.
بعد از هر بار تغییر در کد ها باید مجددا webpack را برای اعمال تغییرات، راه اندازی کنید. میتوانید از حالت Watch استفاده کنید. در این حالت webpack تمامی فایل های شما را نظارت کرده و به محض کوچکترین تغییری که ذخیره شود، مجددا فایل ها کامپایل میکند.
$ npm install -- --webpack -w
این قابلیت فقط در حالت برنامه نویسی و طراحی سایت کاربرد د ارد. برای تولید فایل نهایی برای استفاده از سایت در حالت آماده میتوانید از قابلیت Production استفاده نمایید. در این قابلیت کد های شما فشرده میشوند. در این حالت علاوه بر کم شدن حجم فایل ها در زمان باز شدن صفحه، کد های شما کد شده و قابل خواندن به راحتی نیستند.
$ npm install -- --webpack --production