插件 es-php

es-php 是对php语言的实现。内置了php的标准语法

选项配置

在初始化工程时会根据选择的插件自动生成选项配置。

es.config.js

module.exports = {
plugins:[{
    name:"es-php",
    options:{
        //构建的php版本
        target:7,
        //是否为严格模式
        strict:true,
        //生成文件
        emit:true,
        //使用绝对路径导入
        useAbsolutePathImport:false,
        //在头部导入文件
        import:true,
        //生成文件的后缀
        suffix:'.php',
        //配置当前语法插件的作用域
        context:{
            //一个正则表达式判断文件路径的数组。如果有配置并且有匹配则会把匹配的所有文件设置为当前插件的专用域
            include:null,
            //一个正则表达式判断文件路径的数组。如果有配置并且有匹配则会把匹配的所有文件排除当前插件的专用域
            exclude:null,
            //如果设置为true,在引用表达式描述时只能在当前插件的作用域中使用,在其它插件使用时会报错
            only:false
        },
        //编译宏在编译时需要读取的属性值,此配置直接影响编译宏对构建代码的结果
        metadata:{
            env:{}
        },
        //composer 文件的路径
        composer:null,
        //当没有在头部导入文件并且也没有把目录当作命名空间时是否需要生成一个命名空间与文件路径的映射。主要通过此命名空间来加载文件
        consistent:true,
        //资产文件的后缀
        assets:/\.(gif|png|jpeg|jpg|svg|bmp|icon|font|css|less|sass|scss|js|mjs|cjs|vue|ts)$/i,
        //是否需要对指定扩展的资产进入打包处理
        bundle:{
            //启用打包为true
            enable:false,
            //需要打包的扩展
            extensions:['.js','.mjs','.cjs','.vue','.es','.ts','.sass','.scss','.less'],
            //EaseScript 插件
            plugins:[],
            //esbuild 配置选项
            esbuildOptions:{}
        },
        //定位资源
        resolve:{
            //定位 use 标识符
            usings:{},
            //定位模块的目录
            folders:{
                "*.global":"escore",
            },
            //定位模块的命名空间
            namespaces:{},
        },
        //是否把目录当作命名空间
        folderAsNamespace:true,
        //构建资产时的存放目录
        publicPath:'public',
        //一个路径字符串数组,判断是否为外部依赖,外部依赖不会被生成文件
        externals:[],
        //一个正则或者字符串的数组,在导入文件时判断是否需要排除
        excludes:[],
        //一个路径字符串数组,在构建时默认构建这些文件
        includes:[]
    }
}]}

字面量对象

字面量对象“{}”最终都会生成字面量数组 “[]”的形式来代替字面量对象。所以在构建时也会默认以数组的形式来生成对象链代码。如果要明确区分应该使用 es-php 插件定义的 ArrayProtectorObjectProtector 专有类型。

数组保护类型

数组保护类型主要是为了在构建时如何生成对象链运算符而定义的专有类型。

declare type ArrayProtector<T> = T

源文件

type Category = {
    title:string
}
const map:ArrayProtector<Category> = {};
map.title = '123';
console.log(map.title)

构建后

<?php
declare (strict_types = 1);
include_once(__DIR__ . '/../../escore/System.php');
use \escore\System;
$map = [];
$map['title'] = '123';
System::print($map['title']);

对象保护类型

对象保护类型主要是为了在构建时如何生成对象链运算符而定义的专有类型。

declare type ObjectProtector<T> = T

源文件

type Category = {
    title:string
}
const map:ObjectProtector<Category> = new stdClass();
map.title = 'title'
console.log(map.title)

构建后

<?php
declare (strict_types = 1);
include_once(__DIR__ . '/../../escore/System.php');
use \escore\System;
$map = new stdClass();
$map->title = 'title';
System::print($map->title);

引用地址类型

引用内存地址类型主要是为了在构建时针对变量使用寻址"&"运算符。

declare type RMD<T> = T;

源文件

const map:RMD<string[]> = []
const arr = map;

构建后

<?php
declare (strict_types = 1);
$map = [];
$arr = &amp;$map;