我试图在 SailsJS 中手动包含一些 Assets ,但我无法让它们工作。他们保持 404'ing。
config/routes.js 评论告诉我,assets/images/1.png 中的图像可以通过 href="images/1.png"
访问。 .同样的事情似乎不适用于样式表 <link rel="stylesheet" href="/styles/style.css">
导致 404 未找到。
我看到 Sails 最近使用了一个非常广泛的 Gruntfile,但我想要更多的控制,所以我放弃了它。我知道这打破了 Assets 的自动包含,但这是否也打破了手动插入? :(
编辑:
我在文档中发现公共(public) Assets 不再从 assets 文件夹提供,而是从 .tmp/public 文件夹提供。有没有一种方法可以改变这种行为,只使用 assets/文件夹作为面向公众的目录?
当然,另一种选择是简单地使用 Sails 的 Gruntfile 方法,但即使当我使用 lessc
手动编译东西时,它也会不断抛出较少的编译器错误。一切正常……
最佳答案
如果您删除 Gruntfile.js
,您的所有 Assets 都不会由 sails 管理。
我应该将我的 css 和 javascript 资源放在 sails 中的什么位置?
Sails 使用 grunt来管理 Assets 。其中一些“管理”涉及在您的项目文件夹结构和服务器的公用文件夹之间同步文件,但一如既往,我有点超前了。
grunt
的配置基于位于 sails 项目根目录中的 Gruntfile.js
文件。这个文件中有很多内容,但是,我将专注于 javascript 和 css Assets 。
您项目的 Assets
当您第一次创建项目时,您可以选择使用 --linker
标志。使用该标志的示例是 sails new projectName --linker
。以下是两种场景下/assets
文件夹的目录结构:
使用 --linker
标志
/assets
/images
/linker
/js
/styles
/templates
不使用 --linker
标志
/assets
/images
/js
/styles
请注意,您可以通过手动创建 /linker
文件夹并将其插入到您的 /assets
路径。然后,您可以在 /linker
下添加 /js
、/styles
和 /templates
。
服务器的公共(public)文件夹
当通过 sails lift
启动 sails 服务器时,将通过 .tmp
文件夹中的 grunt
创建/同步以下文件夹结构:
.tmp
/public
如果任何其他项目文件夹(例如 /images
、/js
、/styles
、/templates
) 包含它们被复制/同步到 .tmp/public
文件夹的内容。区别在于,如果存在 /linker
文件夹,则 /js
、/styles
和附加的 /templates
文件夹在 /linker
下创建。
我的 layout.ejs
文件发生了什么变化?
如果您使用 /linker
文件夹,sails 将更改您的 layout.ejs
文件以包含指向您的 javascript 和 css 文件的链接。因此,从项目的 /views
文件夹提供的任何页面都可以访问这些文件中包含的 javascript 和 css。
Grunt 使用 layout.ejs
中的注释标签作为这些链接的占位符。例如,放在 /style
文件夹中的任何内容都会自动链接到 layout.ejs
中这两个标签之间:
<!--STYLES-->
<!--STYLES END-->
/js
文件夹中的任何内容都将链接在这两个标签之间:
<!--SCRIPTS-->
<!--SCRIPTS END-->
/templates
文件夹中的任何内容都将链接在这两个标签之间:
<!--TEMPLATES-->
<!--TEMPLATES END-->
访问 Sail 的 Assets
以下是您在任一情况下访问 Assets 的方式:
使用 /linker
文件夹
/js
--> /linker/js/yourFile.js
/styles
--> /linker/styles/yourCSS.css
不使用 /linker
文件夹
/js
--> /js/yourFile.js
/styles
--> /styles/yourCSS.css
关于javascript - 在 SailsJS 0.9.7 中手动包含 Assets ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20325810/