我正在尝试在SailsJS中手动包含一些资产,但我无法让它们工作。他们继续404'。
config / routes.js评论告诉我,assets / images / 1.png中的图像可以通过href="images/1.png"
访问。同样的事情似乎不适用于样式表,因为<link rel="stylesheet" href="/styles/style.css">
导致找不到404。
我看到Sails最近使用了非常广泛的Gruntfile,但我想要更多的控制权,所以我放弃了它。我知道打破资产的自动包括,但这也打破了手动插入? :(
修改
我在文档中发现公共资产不再从assets文件夹提供,而是从.tmp / public文件夹提供。有没有办法可以改变这种行为,只使用assets /文件夹作为面向公众的目录?
另一种选择当然是简单地使用Sails的Gruntfile方法,但是即使我使用lessc
手动编译事物,它仍然可以减少编译器错误...
答案 0 :(得分:8)
如果删除Gruntfile.js
,您的资产都不会由风帆管理。
Sails使用grunt来管理资产。一些“管理”涉及在项目文件夹结构和服务器的公共文件夹之间同步文件,但一如既往,我已经领先于自己。
grunt
的配置基于您的sails项目根目录中的Gruntfile.js
文件。这个文件中有很多内容,但是,我将专注于javascript和css资产。
首次创建项目时,您可以选择使用--linker
标志。使用该标志的示例是sails new projectName --linker
。以下是两种情况下/assets
文件夹的目录结构:
使用 --linker
标记
/assets
/images
/linker
/js
/styles
/templates
不使用 --linker
标志
/assets
/images
/js
/styles
注意,您可以通过手动创建--linker
文件夹并将其插入/linker
路径来“升级”未使用/assets
标记创建的项目。然后,您可以在/js
下添加/styles
,/templates
和/linker
。
通过sails lift
启动sails服务器时,通过grunt
文件夹中的.tmp
创建/同步以下文件夹结构:
.tmp
/public
如果任何其他项目文件夹(例如/images
,/js
,/styles
,/templates
)包含内容,则会将其复制/同步到{{1 }}夹。区别在于,如果存在.tmp/public
文件夹,则会在/linker
下创建/js
,/styles
和其他/templates
文件夹。
/linker
文件会怎样?如果您使用layout.ejs
文件夹,则风帆会更改您的/linker
文件,以包含指向您的javascript和css文件的链接。因此,从项目的layout.ejs
文件夹提供的任何页面都可以访问这些文件中包含的javascript和css。
Grunt使用/views
中的评论标记作为这些链接的placehodler。例如,放置在layout.ejs
文件夹中的任何内容都会自动在/style
这两个标记之间链接:
layout.ejs
<!--STYLES-->
<!--STYLES END-->
文件夹中的任何内容都将在这两个标记之间链接:
/js
<!--SCRIPTS-->
<!--SCRIPTS END-->
文件夹中的任何内容都将链接在这两个标记之间:
/templates
以下是在任一情况下访问资产的方式:
使用 <!--TEMPLATES-->
<!--TEMPLATES END-->
文件夹
/linker
- &gt; /js
/linker/js/yourFile.js
- &gt; /styles
不使用 /linker/styles/yourCSS.css
文件夹
/linker
- &gt; /js
/js/yourFile.js
- &gt; /styles