使用npm和CakePHP 3-文件位置

And*_*ndy 5 cakephp node.js npm cakephp-3.0

如果使用npm在CakePHP中安装软件包,则目录结构将如下所示:

bin/
composer.json
composer.lock
config/
favicon.ico
.gitignore
.htaccess
index.php
logs/
node_modules/
.npmrc
package-lock.json
phpunit.xml.dist
plugins
README.md
src/
tests/
tmp/
vendor/
webroot/
Run Code Online (Sandbox Code Playgroud)

所以我已经用npm安装了这样的软件包,它创建了.npmrc

npm install --save-dev @fortawesome/fontawesome-pro
Run Code Online (Sandbox Code Playgroud)

这会将文件复制到 node_modules/

但是在Cake中,这是不可访问的,因为它需要放在里面 webroot/

例如,如果您链​​接到node_modules/@fortawesome/fontawesome-pro/css/all.css,则会得到一个404,因为node_modules/CakePHP在文件系统中无法访问。

因此,除了手动移动文件之外,每次使用npm都非常麻烦:

mv node_modules webroot/node_modules
Run Code Online (Sandbox Code Playgroud)

人们在这种情况下使用什么策略?

Cake版本是3.7,但在这种情况下,我认为这并不重要。

sav*_*rio 1

我个人使用AssetCompress插件来处理这些问题。在文件中config/asset_compress.ini,您定义资产及其位置,并控制要放置编译/压缩资产的位置(在 webroot 内)。

按照插件安装说明进行操作,并将以下内容添加到 default/sample config/asset_compress.ini`:

...
[css]
paths[] = ROOT/node_modules/@fortawesome/fontawesome-pro/css/*
cachePath = WEBROOT/cache_css
...
[awesome.css]
files[] = all.css
filters[] = CssMinFilter
...
Run Code Online (Sandbox Code Playgroud)

你的模板将像这样使用它:

<?= $this->AssetCompress->css('awesome.css') ?>
Run Code Online (Sandbox Code Playgroud)