将 Grunt JS 集成到 Symfony 中并替换 Assetic
网络代理 » 数字新闻 » 将 Grunt JS 集成到 Symfony 中并替换 Assetic

将 Grunt JS 集成到 Symfony 中并替换 Assetic

我知道 咕噜JS 从未使用过它,但我不得不听取开发人员的意见 Symfony的 给我质量,以便我研究这个解决方案。 首先,更换 资产阶级 平价 咕噜JS 对我来说是使我的项目工作的解决方案 Symfony的HHVM. 现在服务器 PHP de Facebook 完美配合 资产阶级 但我发现继续使用的理由越来越少 资产阶级. 最后,使用 咕噜,一个基于 节点JS, 驱使大多数开发者使用 鲍尔,另一个用于管理依赖项的插件。 我们将讨论 鲍尔 降低。 让我们快速了解一下优缺点。

注意力 ! 在开始迁移应用程序之前,我建议您对代码进行版本控制并进行一些测试。 强烈建议在开始这项长期任务之前阅读整篇文章。

介绍

Assetic,被误解的朋友

就我而言,我认为资产阶级 被误解和误用。 我会向你解释我的想法。 (另外,由于我的误解,我更正了这篇文章,感谢 Manuel Klein 的反馈)。

好处

指某东西的用途资产阶级 允许您取消资源上的缓存,因为每次启动命令时生成的 JS 和 CSS 资源的名称都会更改“资产:转储”. 一定的优势!

缺点
  • Assetic 提供了很少的选项来配置资源的生成方式。
  • 有必要安装 PHP 包来生成像 LESS 这样的外来资源。 PHP代码安装在 厂商 而此任务仅对客户端有用。 不适合服务器。 此外,它还增加了您的项目数量。
  • 代码 PHP 是必要的 模板 嫩枝 运用 资产阶级 或者几乎所有的人。 而在 Grunt 中,编译后的资源将按照您给它的名称进行调用。

在你的模板中真正使用 Assetic

我经常在 模板 嫩枝 我遇到的资源有时通过链接 资产阶级, 有时通过 资产 de 交响乐。

1
2
3
4
5
# 使用资产
@NamespaceMyBundle/Resources/public/css/main.css
# 未使用的资产,使用资产
/bundles/namespacemy/css/main.css

在第一种情况下, 资产阶级 真的适用。 在第二种情况下, 资产阶级 是完全隐藏的,以免使用 资产 de Symfony的. 指某东西的用途 资产 在我看来也是一个错误,至少对于访问 JS 和 CSS 资源而言。 括号结束...

Grunt JS Sooo 灵活的编译器!

咕噜JS 基于 Node.js的. 它是一个客户端工具,使用模块来执行许多操作,例如文件串联、 缩小、图像压缩、LESS、TypeScript 的编译……不像 资产阶级,您将不得不设置某些配置,但请放心,这项初始投资会得到回报,最终会比资产阶级.

Bower介绍,资源的composer.json

咕噜JS 很好,被放在同一个段上资产阶级. 但只要你用 Node.js的, 以及使用 鲍尔 ! 它是一个依赖管理器。 简单地说,你定义你需要的资源,“这样的库在这样的版本”和 鲍尔 负责获取您想要的版本。 当然,就像 composer.jsonPHP,您可以添加版本范围。 如果你想要一个 3.3 版本的库。, *凉亭 将为您提供最新版本。 轻松更新这些资源的解决方案。 我们的标准项目中反复出现的问题,因为我们有(曾经!)下载一个版本并且之后从不更新它的倾向。 我们没有有时非常有用的次要更新。

从技术上讲 鲍尔 使用 bower.json 文件。 它的语法非常简单。 我敦促您使用它,即使您可以在没有它的情况下继续使用它。 与资源不同,该文件需要进行版本控制 鲍尔 会上门为您下载。 为了让你开始,我将在下面给你一个例子。

版本化编译资源

就我而言,我养成了不为我的编译资源版本化的习惯 资产阶级 但我决定反其道而行之 咕噜JS. 因为我没有资源来管理 鲍尔 (见简介 鲍尔), 我将编译我的资源和 激动. 这样,我可以快速部署我的应用程序。 我从来没有收到过关于这种做法的反馈,但对我来说这似乎是值得尊敬的,因为在部署时取消了两个操作(使用 鲍尔 并编译 咕噜JS), 以及需要有 Node.js的 在他的机器上。

从我们的 Symfony 项目中移除 Assetic

资产阶级 被选为负责编译资源的默认组件。 请注意,尽管如此,它还是很容易移除的。

删除块 嫩枝 类型 JavaScript的 et 样式表. 它们不是必需的。 将您正在使用的文件放在一边。 将来,您要使用的文件将在文件中定义 文件.js. 我们稍后会看到。

1
2
3
4
5
6
7
8
#app/config/config.yml
# 从资产中删除配置。 在config_prod.yml、config_dev.yml等上传的文件中也会有一些
资产:
调试: “%kernel.debug%”
使用控制器: false
捆绑: []
筛选器:
CSS重写: ~
1
2
3
4
5
#app/AppKernel.php
# 通过从 AppKernel 中删除该行来停止加载 AsseticBundle
...
SymfonyBundleAsseticBundleAsseticBundle()
...
1
2
3
4
5
#作曲家.json
# 删除资产包
...
“symfony/assetic-bundle”:“~2.3”
...

好了,你已经停用了 资产阶级 全球范围内。 这样就不再指望找到命令了 资产:转储 et 资产:手表.

Grunt JS 将如何在我们的项目中工作?

我们必须使用三个文件配置我们的项目:

  • 的package.json 这将允许我们安装插件 Node.js的 (咕噜JS 和他的贡献);
  • 凉亭.json 报告要解决的依赖关系,以便编译我们的资源;
  • 文件.js 你将在其中工作最多。 它将包含编译部分或全部项目可能和/或要执行的所有操作。

package.json 安装 Grunt JS

1
2
3
4
5
6
7
8
9
10
11
{
“依赖”{
“咕噜”: “^0.4.5”,
“无贡献”: “~0.11.0”,
“grunt-contrib-uglify”: “^0.6.0”,
“加载任务”: “^0.6.0”
},
“开发依赖”{
“咕噜”: “^0.4.5”
}
}

首先,使用此内容。 它需要安装 咕噜JS 和贡献,其中两个(无贡献 et 咕噜贡献丑化) 将允许你编译你的 JavaScript 文件和文件 更少的CSS.

bower.json 来解决我的依赖(bootstrap,font-awesome,......)

1
2
3
4
5
6
7
8
9
10
11
12
{
“忽略”[
“**/.*”,
“节点模块”,
“bower_components”,
“ 测试 ”,
“测试”
],
“依赖”{
“自举”: “3.3.*”
}
}

这是一个最小的文件。 就我而言,我要求最新版本的 3.3 分支 引导 被下载。 默认情况下,当您执行 凉亭安装 您的依赖项将安装在该文件夹中 bower_components. 通过使用 .bowerrc 您可以更改目标文件夹。 您可以在 Bower 的网站上找到更多信息。

1
2
# 使用 Bower 安装依赖
$凉亭安装

Gruntfile.js – 一切从哪里开始

您想要在文件中添加该事实的所有命令和操作 文件.js. 除其他外,您可以编译文件 少CSS et 上海社会科学院,连接任何类型的文件,编译 打字稿, 压缩器 JavaScript 文件、图像以及 HTML 文件。 您还可以调整图像大小和复制文件(如字体)。

今天我只是要告诉你如何编译文件 。较少的 并缩小文件 JS。. 我每天执行的操作,这些操作让我今天可以轻松地使用这部分或那部分 引导. 而不是使用所有 引导 当你需要的只是 雕ly,在自定义库上工作可能会很有趣。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
模块.exports= 功能 (咕噜) {
要求('加载任务')(咕噜声);
grunt.initConfig({
{
DIST{
选项{
压缩: true,
压缩包: true,
优化: 2
},
{
“网络/CSS/main.css”[
“bower_components/bootsrap/dist/css/bootstrap.css”,
“src/Namespace/MyBundle/Resources/public/css/main.less”
]
}
}
},
丑化{
选项{
失踪: false,
资源地图: true
},
DIST{
{
'网络/js/main.js'[
'src/Namespace/MyBundle/Resources/public/js/main.js',
]
}
}
}
});
grunt.registerTask('默认'[“较少的”, “丑化”])?
};

这是一个完美的工作文件。 我也在一个项目中使用它 框架 因为它是一个 API. 资产阶级 对我来说是毫无用处的。 所以我宁愿不用它,而是使用服务器外部的工具,并在部署时交付完美构建的资源。

让我们来描述 Gruntfile.js 的操作

在前面的文件中,我配置了两个贡献 咕噜JS (_少_and 丑化) 是我安装的,多亏了我的 的package.json. 您会注意到插件之间很容易区分。 以扩展为例 .

每一份贡献 咕噜 您将要使用的内容必须通过为贡献定义的关键字声明。 例如,对于 无贡献 关键词是 . 在这部分下,我们可以定义 目标. 根据条款 目标 综合 子部分. 在具体情况下,我们可以定义一个 目标 引导 从源代码编译同名库 . 我们可以定义另一个集合 DIST 编译我们项目的源代码。 多个子集的使用不是必需的,但您稍后将有机会在使用 贡献观察 为了省时间。

那么相同扩展的子集的结构是ISO。 在 Contrario,每个贡献的结构都不同。 标准贡献通常会提供许多示例。 GitHub 存储库上提供了官方插件。

让我们回到我们的示例和文件编译的配置 。较少的. 在游戏里 我们将最终文件的名称添加为键,将要编译的输入文件数组添加为值。 我认为没有必要详细说明,因为语法非常直观。

贡献 丑化 用于 JavaScript 文件的连接、缩小和压缩,使用相同的结构。 在这种情况下,使用它的两个贡献非常简单。

编译的艺术

现在比较ilons 我们的消息来源。 和 资产阶级,我们运行这个命令:

1
php 应用程序/控制台 assetic:dump

现在我们已经删除了 资源包。 我们不再有此订单。 所以我们要运行我们的插件 Node.

1
咕噜

你看它仍然不是很复杂......在这种情况下,将要执行的任务将是为配置文件指定的任务 默认。 它在最后一行定义。

1
grunt.registerTask('默认'[“较少的”, “丑化”])?

你会很好地定义一个配置文件 JavaScript的 谁不会执行 丑化.

1
grunt.registerTask('javascript'['丑化'])?

如果您可以运行命令 咕噜 在配置文件名称之后。

1
咕噜javascript

您可以根据需要定义任意数量的配置文件。 就我的个人资料而言 JavaScript的,利息较少,因为您也可以进行以下调用。

1
咕噜丑化

总结

现在您知道如何编译资源了。 如果您还没有掌握所有的微妙之处,您应该很快就能体会到 咕噜 关于资产阶级. 更重要的是,除了 javascript 和 css 等标准资源外,您还可以处理字体、图像……很快就赢得了我的青睐。

的真正优势 咕噜 是其使用的灵活性。 咕噜 et 鲍尔 它们之间体现了对 Assetic 的替代。 没有 鲍尔 你仍然可以使用 咕噜 但体验不会是完整的。

希望这篇文章能让你轻松了解使用 咕噜. 勇敢一点,你就快到了!

★★★★★