LOFTER for ipad —— 让兴趣,更有趣

点击下载 关闭
symfony4.2通过encore导入js与css
lwingl 2019-01-11

        本来想写的是在symfony4.2中使用vue的,但发现encore在symfony4.2中的用法也symfony4.0的用法已经有所差别了,所以就顺道先写一下encore的用法,算是做个笔记吧,免得一段时间不用又要回头查英文资料。

        首先,encore的基本用法,在官方的doc里面已有写,只是有点散。英文不错的可以直接去看。

一。symfony环境安装

1.安装symfony(有点废话,就不多展开说了),当前版本是4.2

composer create-project symfony/website-skeleton my-project(my-project你的项目目录名)

        另外要使用encore还需要在系统开发环境下(是系统环境不仅仅是symfony目录的环境)安装npm或yarn,没有的话就不用继续向下看了。怎么安装请参考其他样关文章。

2.安装encore

!!!进入自己的项目目录!!

composer require encore

yarn install

        至于yarn这东西,众所周知的原因,连接时灵时不灵。三天前老是连不上,这两天我也没用梯子,莫明又好了。用yarn前提是你要先装,别外貌似yarn是替代npm的,应该也可以用npm或cnpm装吧。cnpm就是在中国的服务器,连接应该没问题。不过我对npdejs不熟,不行的朋友找熟悉nodejs的朋友问一下yarn install能不能被cnpm代替。


二。使用encore

        安装好环境之后encore会在主目录assets下建立css与js文件夹以前各自文件夹里的app.css与app.js。没有的话,可能安装失败了。可以自己试试建立,下面是大概目录结构,另外webpack.config.js也是安装encore时安装的,也是使用encore必需用到的。

你的项目目录

   𠃊assets

   |    𠃊css

   |      𠃊app.css

   |    𠃊js

   |      𠃊app.js

   |

   𠃊...省略其他与本文无关文件夹

   |

   ...省略其他与本文无关文件

   |

   𠃊webpack.config.js

1。建立一个页面,默认安装的symfony是没有默认页面的,就算启动后的主页也不是默认的页面

命令行输入

php bin/console make:controller

        make:controller用法,以及页面、router、controller的关系等不在本文分享范围内。

        接着输入自己的路由名,我输入的是test1。于是目录通过make变成以下这样,多出来几个跟test1相关的文件与文件

你的项目目录

   𠃊assets

   |   𠃊css

   |   |  𠃊app.css

   |   𠃊js

   |      𠃊app.js

   𠃊src

   |   𠃊Controller

   |      𠃊Test1Controller.php

   𠃊templates

   |      𠃊test1

   |           𠃊index.html.twig

   |

   𠃊...省略其他与本文无关文件夹

   |

   ...省略其他与本文无关文件

   |

   𠃊webpack.config.js

2。修改webpack.config.js

        安装encore已经在webpack.config.js里自带了一行,作为官方示例,示例是可以删掉的,熟练的话也可以自己写个新的webpack.config.js,里面的东西不多。其中安装好的webpack.config.js里有这么一行

.addEntry('app', './assets/js/app.js')        

        app.js就是上面目录结构里的app.js,是装encore时自动建立的。另外,从这里开始跟symfony4.0有所差别了,在symfony4.0的webpack.config.js里还可以引入css,可以有这么一行.addStyleEntry('css/app', './assets/css/app.css')。

        我们写上我们自己文件的引用,大家就不要吐槽oldapp这个名字了。

.addEntry('oldapp', './assets/js/oldapp.js')


3。建立自己的js与css文件

        在css文件夹建立oldapp.css,里面随便写点什么,比如下面的

body {

    background-color: red;

}

        在js文件夹建立oldapp.js,在这里引用css文件。下面是oldapp.js的内容,除了非必须的注释,其实就两行。

//引入css

require('../css/oldapp.css');


//随便写再点什么,就写个console.log好了

console.log('你的oldapp.js运行成功');

怕中文有所影的话,可以自己把中文改成英文。

文件结构变成这样

你的文件结构

   𠃊assets

   |   𠃊css

   |   |    𠃊app.css

   |   |    𠃊oldapp.css

   |   𠃊js

   |       𠃊app.js

   |       𠃊oldapp.js

   𠃊src

   |       𠃊Controller

   |       𠃊Test1Controller.php

   𠃊templates

   |       𠃊test1

   |           𠃊index.html.twig

   |

   𠃊...省略其他与本文无关文件夹

   |

   ...省略其他与本文无关文件

   |

   𠃊webpack.config.js

3。在页面中导入css与js

打开/template/test1/index.html.twig文件,make:controller默认的内容如下

{% extends 'base.html.twig' %}


{% block title %}Hello Test1Controller!{% endblock %}


{% block body %}

<style>

    .example-wrapper { margin: 1em auto; max-width: 800px; width: 95%; font: 18px/1.5 sans-serif; }

    .example-wrapper code { background: #F5F5F5; padding: 2px 6px; }

</style>


<div class="example-wrapper">

    <h1>Hello {{ controller_name }}! ✅</h1>


    This friendly message is coming from:

    <ul>

        <li>Your controller at <code><a href="{{ '/var/www/html/symfonyvue/src/Controller/Test1Controller.php'|file_link(0) }}">src/Controller/Test1Controller.php</a></code></li>

        <li>Your template at <code><a href="{{ '/var/www/html/symfonyvue/templates/test1/index.html.twig'|file_link(0) }}">templates/test1/index.html.twig</a></code></li>

    </ul>

</div>

{% endblock %}


加入自己的代码,变成如下

{% extends 'base.html.twig' %}


{% block title %}Hello Test1Controller!{% endblock %}


{% block stylesheets %}

   {#  导入css文件  #}

    {{ encore_entry_link_tags('oldapp') }}

{% endblock %}


{% block javascripts %}

    {#  导入js文件  #}

    {{ encore_entry_script_tags('oldapp') }}

{% endblock %}


{% block body %}

<style>

    .example-wrapper { margin: 1em auto; max-width: 800px; width: 95%; font: 18px/1.5 sans-serif; }

    .example-wrapper code { background: #F5F5F5; padding: 2px 6px; }

</style>


<div class="example-wrapper">

    <h1>Hello {{ controller_name }}! ✅</h1>


    This friendly message is coming from:

    <ul>

        <li>Your controller at <code><a href="{{ '/var/www/html/symfonyvue/src/Controller/Test1Controller.php'|file_link(0) }}">src/Controller/Test1Controller.php</a></code></li>

        <li>Your template at <code><a href="{{ '/var/www/html/symfonyvue/templates/test1/index.html.twig'|file_link(0) }}">templates/test1/index.html.twig</a></code></li>

    </ul>

</div>

{% endblock %}

       可以看出来,4.2官方建议导入的方式是使用encore_entry_link_tags函数。而oldapp这个名字就是webpack里定义的.addEntry('oldapp', './assets/js/oldapp.js')。

        这样的好处是写template与就是写页面的人,并不需要关心css与js的路径在哪,也不需要使用asset函数。

{% block stylesheets %}

    <link rel="stylesheet" href="{{ asset('build/oldapp.css') }}">

    {# 没装asset的也可以不用上面一行用下面一行 #}

    {# <link rel="stylesheet" href="/build/oldapp.css"> #}

{% endblock %}


{% block javascripts %}

    <script src="{{ asset('build/runtime.js') }}"></script>

    <script src="{{ asset('build/oldapp.js') }}"></script>

    {# 没装asset的也可以不用上面一行用下面两行 #}

    {# 

    <script src="/build/runtime.js"></script>

    <script src="/build/oldapp.js"></script>

     #}

{% endblock %}

        这里又有与4.0的不同了,同样是直接引用js文件。在引用js方面4.0只需要引用oldapp.js就行了。在4.2中要多引用一个runtime.js。我试过不引用runtime.js而直接引用oldapp是不行的。原理或框架设计我也研究过,只是使用上只能这样。

        4.2中建议两种方式的引用都包在{% block stylesheets %}{% endblock %}与{% block javascripts %}{% endblock %}中,虽然直接引用用4.0的方法貌似也能用。但毕竟官方推荐新方式。

        另外,引用要注意先后,比如下一篇文章要说的vuejs。本文的js与css的引用放在html前,就像很多js与css都在<head>中引用一样。但有一些,比如vuejs的引用。vuejs是寻找html里的标记,然后再把自己的内容放到标记了的html里去。如果vuejs放在html之前,vuejs就找不到html的标记了,就会报错。大家根据自己的需求决定插入位置,并不要求一定放前面。

4。建立/public/build/下的js与css    

        虽然在webpack里引用的是assets下的js与css,在html.twig里直接引用时又是引用/build下的js与css。但实际上引用的都是public/build下的js与css。为什么会这样,这就和symfony的结构与encore和webpack的结构相关,不是本文内容

        建立并不是自己手工建立,是通过代码行建立,默认在public甚至连build这个文件夹都没有。        

在代码行输入

yarn encore dev

就会自动建立build文件夹与js和css文件。另外运行npm也是可以的,如下

npm run dev

        还有就是yarn encore dev --watch(用于开发时实时同步源文件与build下的文件)或yarn encore production(压缩js与css文件用于实际应用)这些都是yarn,npm,webpack等nodejs应用,甚至都不是symfony的相关问题,不在本文分享内容之内。一般只要知道通过代码行建立public/build下的js与css就行了。建立后新的目录结构如下:

你的项目目录

   𠃊assets

   |      𠃊css

   |      |      𠃊app.css

   |      |      𠃊oldapp.css

   |      𠃊js

   |          𠃊app.js

   |          𠃊oldapp.js

   𠃊src

   |      𠃊Controller

   |      𠃊Test1Controller.php

   𠃊templates

   |      𠃊test1

   |             𠃊index.html.twig

   |

   𠃊public

   |      𠃊build

   |             𠃊oldapp.js

   |             𠃊oldapp.css

   |             |

   |      ...省略其他与本文无关文件

   |             |

   |             𠃊app.js (安装encore时自带的app.js示例引致此文件出现)

   |             𠃊app.css(安装encore时自带的app.css示例引致此文件出现)

   |

   𠃊...省略其他与本文无关文件夹

   |

   ...省略其他与本文无关文件

   |

   𠃊webpack.config.js


三。启动symfony后台以及查看页面

在代码行输入

php bin/console server:start

        在浏览器浏览localhost:8000/test1访问页面。看看background-color有没变化,以前在浏览器开发模式查看console有没输出你的oldapp.js运行成功。


至此,symfony4.2通过encore导入js与css结束,下面一篇会写symfony4.2使用vuejs

推荐文章
评论(0)
联系我们|招贤纳士|移动客户端|风格模板|官方博客|侵权投诉 Reporting Infringements|未成年人有害信息举报 0571-89852053|涉企举报专区
网易公司版权所有 ©1997-2024  浙公网安备 33010802010186号 浙ICP备16011220号-11 增值电信业务经营许可证:浙B2-20160599
网络文化经营许可证: 浙网文[2022]1208-054号 自营经营者信息 工业和信息化部备案管理系统网站 12318全国文化市场举报网站
网信算备330108093980202220015号 网信算备330108093980204230011号
分享到
转载我的主页