bor-attila / cakephp-rollup
CakePHP的Rollup插件,用于更好的CSS/JS处理
Requires
- php: >=7.2
- cakephp/cakephp: 4.x
This package is auto-updated.
Last update: 2022-12-23 11:56:27 UTC
README
此插件并非真正关于代码,它只是提供了一个如何处理CSS/JS的结构,以及一些辅助方法。
SEO不是问题?你想有一个完全客户端渲染的前端?那么你可能应该检查inertiajs。SEO或SSR不是问题?你想使用CakePHP作为后端并在JS中构建整个前端?那么你应该检查vuejs。你只需要一个'assetcompressor'?那么你应该检查markstory/asset_compress
安装
您可以使用composer将此插件安装到您的CakePHP应用程序中。
安装composer包的推荐方法是
composer require bor-attila/cakephp-rollup
在您的Application.php中启用插件
$this->addPlugin('CakephpRollup');
作为包管理器。我将使用yarn,但如果你愿意,也可以使用npm。
如果没有,在webroot目录中使用yarn创建一个package.json。
cd webroot
yarn init
创建默认文件夹结构并创建基本文件。
bin/cake rollup:init
成功执行此命令后,您的WEBROOT目录应如下所示。
+-- css
+-- scss
| +-- style.scss
+-- plugins
+-- js
| +-- src
| +-- components
| +-- mixins
| +-- static
| +-- script.js
| +-- main.app.js
+-- babel.config.json
+-- rollup.config.js
+-- packages.json
css文件夹包含编译后的样式表。您可以添加此行到gitignore
webroot/css/*.min.css
scss文件夹包含样式表源代码。plugins文件夹包含静态的生产就绪第三方库(例如,bootstrap,axios,select2)。js文件夹包含编译后的javascript文件。您可以添加此行到gitignore
webroot/js/*.min.js
js/src文件夹包含javascript应用(!)源文件 - vue,react等... 例如:x.app.js,y.app.js。 js/src/components文件夹包含javascript应用组件源文件。 js/src/mixins文件夹包含可重用的javascript组件。 js/src/static文件夹包含可以直接包含到页面中的javascript源代码('旧方式')。
与样式表协同工作
安装依赖
您需要安装DartSDK!
yarn add dart-sass
将这些脚本添加到您的package.json
"scripts": {
"rollup:scss:build": "`../bin/cake rollup:sass`",
"rollup:scss:watch": "`../bin/cake rollup:sass -w`"
"rollup:scss:clean": "rm -f css/*.min.css"
}
SCSS命令
生产环境
当你运行yarn rollup:scss:build时,来自scss文件夹的所有以字母开头的sass文件都将编译成css并压缩。
例如
- scss/style.scss -> css/style.min.css
- scss/mystyle.scss -> css/mystyle.min.css
- scss/_variables.scss保持不变(当然,如果您将其包含在您的style.scss中,则会被编译)
开发环境
当您运行 yarn rollup:scss:watch 时,所有以字母开头的 scss 文件(^[a-zA-Z])将从 scss 文件夹中编译成 css,并且 sass 编译器将监听文件变化。
辅助函数
CSS 辅助函数
在 View\AppView.php 中,将以下代码添加到 initialize 方法中,用于解释:
$this->loadHelper('CakephpRollup.Css');
或者:
$this->loadHelper('CakephpRollup.Css', [ 'storage' => [ 'body' => ['bodyclass'], ] ]);
CSS 辅助函数仅仅是数组操作。在容器中,您可以存储类名。
add(string $container, string $class, ?string $overwrite = null): bool
remove(string $container, string $class): bool
has(string $container, string $class): bool
get(string $container): string
<html>
<head>
</head>
<body <?= $this->Css->get(); ?>>
//In the tempalte
$this->Css->add('body', 'green');
//Or conditionally
if (true) {
$this->Css->add('body', 'red', 'green');// the green will be replaced with red
$this->Css->remove('body', 'red');// or remove
}
</body>
</html>
样式表辅助函数
在 View\AppView.php 中,将以下代码添加到 initialize 方法中
$this->loadHelper('CakephpRollup.Stylesheet', [ 'cache' => 'default' ]);
样式表辅助函数 帮助加载 CSS 文件内容并将其直接注入到 body 中。这些方法会搜索指定的 CSS 文件,打开文件,创建一个 style 标签并将其存储到缓存中(如果设置了缓存)。
global(array $stylesheets = []): string
返回全局样式表的内容。自动搜索 css/style[.hash]?[.min]?.css。您可以将更多 CSS 文件作为参数添加。
local(): string
返回本地样式表的内容。自动搜索
- css/{prefix}-{controller}-{action}[.hash]?[.min]?.css
- 如果没有前缀,则返回 css/{controller}-{action}[.hash]?[.min]?.css
inline(string $name): string
返回指定样式表的内容。自动搜索 css/{name}[.hash]?[.min]?.css
与 JavaScript 一起工作
安装依赖
yarn add rollup rollup-plugin-terser @rollup/plugin-node-resolve @rollup/plugin-commonjs @rollup/plugin-json
yarn add core-js@3 @babel/core @babel/preset-env @rollup/plugin-babel
将这些脚本添加到您的package.json
"scripts": {
"rollup:js:build": "rollup -c",
"rollup:js:watch": "rollup -c --w",
"rollup:js:clean": "rm -f js/*.min.js"
}
辅助函数
JavaScript 辅助函数
在 View\AppView.php 中,将以下代码添加到 initialize 方法中
$this->loadHelper('CakephpRollup.Javascript', [ 'cache' => 'default' ]);
如何使用
<html>
<head>
</head>
<body>
....
<?= $this->Html->script($this->Javascript->files('main', 'debug', 'awesome')); ?>
<!--
This returns
<script src="js/main.laknsdn78t7f34t79.min.js" />
<script src="js/debug.sanibiobrevoybowueb.min.js" />
<script src="js/awesome.wqojndiqwd766686.min.js" />
or even
<script src="js/main.min.js" />
<script src="js/awesome.min.js" />
-->
</body>
</html>