چهارشنبه , مهر ۴ ۱۳۹۷
خانه / مقالات / برنامه نویسی / web developer / Front End / JIT و AOT در انگولار – قسمت دوم
JIT و AOT در انگولار

JIT و AOT در انگولار – قسمت دوم

تنظیمات کامپایلر انگولار در فایل tsconfig

شما می توانید کامپایل برنامه انگولاری خود را با تنظیماتی که در فایل tsconfig.json  ارائه شده به کامپایلر TypeScript کنترل کنید. این تنظیمات در کلید “angularCompilerOptions” مشخص می شود که در زیر نشان داده شده است:

{
  "compilerOptions": {
    "experimentalDecorators": true,
    ...
  },
  "angularCompilerOptions": {
    "fullTemplateTypeCheck": true,
    "preserveWhitespaces": false,
    ...
  }
}

skipMetadataEmit

این گزینه به کامپایلر اجازه نمی دهد فایل های metadata.json را تولید کند.این گزینه به طور پیش فرض false است.

فایل های metadata.json حاوی اطلاعاتی است که کامپایلر از یک فایل .ts پشتیبانی می کند که در فایل d.ts تولید شده توسط کامپایلر TypeScript موجود نیست. این اطلاعات حاوی محتوای حاشیه نویسی (مانند یک الگوی مولفه) که TypeScript به فایل js انتشار می دهد، اما نه به فایل d.ts

اگر خروجی برنامه شما بصورت TypeScript’s –outFile این گزینه حتما بایستی true باشد در صورتی که از سبک کامپایلری دیگری مثلا webpack  استفاده میکنید این روش توصیه نمی شود.

strictMetadataEmit

این گزینه به کامپایلر می گوید که اگر “skipMetadataEmit” بصورت false باشد، یک خطای به فایل metadata.json گزارش می دهد. این گزینه به طور پیش فرض false است و تنها زمانی باید استفاده شود که “skipMetadataEmit” بصورت false است و “skipTemplateCodeGen”  بصورت true است.  و همچنین برای تایید فایل های metadata.json منتشر شده برای بسته بندی با یک بسته npm است. اعتبار سنجی ببصورت سخت گیرانه است و می تواند خطاهای متادیتا را صادر کند که هرگز در صورت استفاده از کامپایلر بدون این گزینه خطایی ایجاد نمی کند.  strictMetadataEmit برای فایلهای metadata.json معتبر است که حاوی خطا است کامپایلر این خطاها را گزارش می دهد.

skipTemplateCodegen

این گزینه به کامپایلر می گوید که فایل های ngfactory.js و ngstyle.js را نادیده بگیرد. هنگامی که تنظیم می شود، بیشترین اتفاقات کامپایلر را غیرفعال و تشخیص گزارش را غیرفعال می کند. این گزینه می تواند دستور کامپایلر برای تولید فایل های metadata.json برای توزیع به یک بسته npm استفاده شود.

strictInjectionParameters

هنگامی که این گزینه مقدار true قرار داده می شود به کامپایلر می گوید پارمترهایی که نوع تزریق وابستگی آنها مشخص نشده خطا داده می شود. و زمانی که مقدار این گزینه تنظیم نشده و یا false است پارامترهای کلاس که بصورت @Injectable تعریف شده و وابستگی آنها مشخص نیست خطا ایجاد می کند.

flatModuleOutFile

از این گزینه هنگام ایجاد ماژولهای flat به طور مثال  angular/core@ و angular/common@  استفاده کنید در واقع هنگامی که این گزینه استفاده می شود package.json برای کتابخانه باید به عنوان شاخص ماژول falt تولید شده به جای فایل شاخص کتابخانه مراجعه کند. با استفاده از این گزینه فقط یک فایلmetadata.json تولید می شود که حاوی تمام metadata هایی است که لازم است برای نمادهای صادر شده از فهرست کتابخانه استفاده شود.

به طور پیش فرض فایل ts که در قسمت های فایل عرضه شده است، به عنوان شاخص کتابخانه مورد استفاده قرار می گیرد. اگر بیش از یک فایل ts مشخص شده باشد، libraryIndex برای انتخاب فایل مورد استفاده قرار می گیرد. اگر بیش از یک فایل ts بدون یک LibraryIndex عرضه شود، یک خطا تولید می شود. یک شاخص ماژول مسطح d.ts و js با نام flatModuleOutFile داده شده در همان محل فایل index.d.ts کتابخانه ایجاد خواهد شد. برای مثال، اگر یک کتابخانه از فایل public_api.ts به عنوان شاخص کتابخانه ماژول استفاده کند، فیلد tsconfig.json public_api.tsخواهد بود. پس از آن می توان گزینه های FlatModuleOutFile را، به عنوان مثال index.js، که فایل index.d.ts و index.metadata.json را تولید می کند، تنظیم می کند. در قسمت module ما package.json کتابخانه “index.js” خواهد بود و فیلد typing ها “index.d.ts” خواهد بود.

flatModuleId

این گزینه شناسه ماژول مورد نظر را برای وارد کردن یک ماژول flat مورد استفاده قرار می دهد. مراجع تولید شده توسط کامپایلر از این نام ماژول هنگام وارد کردن نمادها از ماژول falt استفاده می کنند. این تنها زمانی معنی دار است که flatModuleOutFile نیز عرضه شده است. در غیر این صورت کامپایلر این گزینه را نادیده می گیرد.

generateCodeForLibraries

این گزینه برای تولید فایل های کارخانه (ngfactory.js و ngstyle.js) در فایل های d.ts با یک فایل متنی metadata.json استفاده می شود. این گزینه پیش فرض true است. هنگامی که این گزینه false است، فایل های کارخانه فقط برای فایل های ts تولید می شوند.

fullTemplateTypeCheck

این گزینه که بصورت پیش فرض false است به کامپایلر  اجازه می دهد تا فاز تأیید صحت کامپایلر را فعال کند که از TypeScript برای تایید عبارات مرتبط استفاده می کند.

annotateForClosureCompiler

این گزینه که بصورت پیش فرض false است با استفاده از ابزار tsickle کامنت هایی که توسط JsDoc برای  Closure Compiler تولید می شود کامپایل میکند.

annotationsAs

این گزینه که سه مقدار میگیرد برای تغییرات tree-shaking و بصورت پیش فرض static مقدار دهی می شود. مقادیر ورودی decorators,static,fields است.

trace

این مورد کامپایلر را برای چاپ اطلاعات اضافی در هنگام کامپایل وادار می کند.

enableLegacyTemplate

استفاده از عنصر <template> از Angular 4.0 به نفع استفاده از <ng-template> منع شده بود، برای جلوگیری از تداخل با عنصر DOM بوسیله نام های مشابه تنظیم این گزینه به true استفاده از عنصر <template> را امکان پذیر می کند. این گزینه به طور پیش فرض fasleاست. ممکن است توسط برخی از کتابخانه های angular  مورد نیاز باشد.

disableExpressionLowering

کامپایلر قالب angular کد را که در آن استفاده می شود یا می توان آن را استفاده کرد، در  annotate تغییر می دهد تا بتوان آن را از ماژول های factory استفاده کرد. تنظیم این گزینه به false بازنویسی را غیرفعال می کند و نیازمند بازنویسی به صورت دستی است.

preserveWhitespaces

این گزینه به کامپایلر می گوید برای حذف فضاهای خالی از قالب های کامپایل شده استفاده شود. این گزینه به طور پیش فرض true است.

allowEmptyCodegenFiles

کامپایلر را به تولید تمام فایل های تولید شده حتی اگر فضای خالی باشند اجبار میکند. این گزینه به طور پیش فرض fasle است. توسط قوانین ساخت bazel استفاده می شود و مورد نیاز است برای ساده سازی نحوه رعایت قوانین پایگاه های وابسته به فایل ها استفاده از این گزینه خارج از قوانین bazel توصیه نمی شود.

JIT و AOT در انگولار – قسمت اول

  • آیا این مقاله مفید بود؟
  • بله   خیر

با تمام وجود علاقمندم مباحث جدید مربوط به برنامه نویسی رو یاد بگیرم و به دیگران یاد بدم. نیمی از زمان روزانه رو صرف یادگیری میکنم. سعی میکنم مقالات مفید و جدید در حوزه برنامه نویسی و به ویژه جاوا اسکریپت رو برای شما دوستان عزیز در لایو گوگل منتشر کنم.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.