在SailsJS 0.9.7中手动包含资产

时间:2013-12-02 10:19:11

标签: javascript sails.js assets

我正在尝试在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手动编译事物,它仍然可以减少编译器错误...

1 个答案:

答案 0 :(得分:8)

如果删除Gruntfile.js,您的资产都不会由风帆管理。

我将css和javascript资源放在哪里?

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

访问Sail的资产

以下是在任一情况下访问资产的方式:

使用 <!--TEMPLATES--> <!--TEMPLATES END--> 文件夹

/linker - &gt; /js

/linker/js/yourFile.js - &gt; /styles

不使用 /linker/styles/yourCSS.css文件夹

/linker - &gt; /js

/js/yourFile.js - &gt; /styles