现在,我正在使用<%- assets.js() %>
在所有网页上包含所有javascript文件。因此,这意味着所有功能都将在所有页面上初始化。
我想知道如何在特定网页上禁用javascript文件?或者,如果有办法在特定网页上包含一些javascript文件,但不是所有的javascript文件。
答案 0 :(得分:4)
自动加载的问题在于,以任何有意义的方式决定源文件的排序真的很难 - 这实际上取决于你如何构建前端。
在v0.8.x(您正在使用的版本中,我可以告诉您),您可以使用config/assets.js
来控制加载的文件夹的排序。这不太理想,但是我的团队在几个项目中使用了一个不错的解决方法。
在v0.9中,我们删除了操纵/资产机架,转而采用紧密集成Grunt,它具有大型社区和一些非常酷且维护良好的软件包,适用于大多数类型的资产捆绑等。
在任何情况下,以下是您可以调查在新版Sails.js中为资产提供服务的不同方法:
在layout.ejs
文件中,创建<link />
和<script></script>
标记,以便像平常一样链接到css和javascript文件中。
我想很多人会说这实际上是最好的选择。要求是一个非常强大的工具。而且我大多都同意 - 如果你正在处理可能来自任何地方的前端javascript,并且将由可能使用不同框架的其他开发人员进行扩展,那么AMD是一个很好的制作方法。确保你保持安全。如果你正在使用Require,那么每个js文件都是它自己的模块,并声明它自己的依赖项,因此资产依赖管理就成了过去。然后在生产模式中,有几个不同的选项来编译和缩小CSS和JS。您甚至可以使用Require从JS动态加载模板和CSS,这非常简洁。如果您对以异步方式加载部分或全部资产感兴趣,AMD / RequireJS是一个不折不扣的赢家。它也是一个全客户端解决方案,非常酷。
我心中唯一的缺点是复杂性。如果您可以控制正在使用的框架,那么您真的不必手动输入每个文件的依赖关系 - 它可以自己解决(参见https://github.com/balderdashy/mast/blob/2.x/lib/raise.js)
在Sails v0.9中使用sails new foo
创建新项目时,会创建一个名为Gruntfile.js
的文件。它有很多东西,其中很多都没有被默认使用。您几乎可以使用Grunt做任何事情,但特别是,您需要了解如何设置将文件从assets/*
复制到.tmp/public/
。
sails new foo --linker
(仅适用于v0.9) Linker很像资产架/装配当前所做的事情。它创建与上面#3相同的Gruntfile,但使用了更多内容。它将按您指定的顺序自动链接文件。 <%= %>
插件允许您自定义将注入js,css和templates的分隔符,而不是查看partials(例如scriptlinker
)。默认情况下,Gruntfile设置为使用JST预编译模板,但同样,您可以根据需要进行设置。
希望有帮助的人,祝你好运!
-Mike
PS-v0.9即将推出,我刚刚完成测试和问题,以确保我们100%在那里。如果您想尝试一下,请查看:
答案 1 :(得分:1)
Sailsjs的负责人回答了这个问题(虽然它是关于选择CSS文件):
“目前,您可以(a)始终引入所有样式并仅使相关的样式适用(b)使用其他工具(如Grunt)捆绑资产,就像在vanilla node.js项目中一样(c)手动链接样式表(将它们放在公共文件夹中)。“
类似地,Google小组提出了更复杂的问题: https://groups.google.com/forum/#!topic/sailsjs/yt9EpJlfzXA
考虑到上述情况,您可能希望每个页面都有一个单独的layout.ejs。您可以使用
为每个页面指定所需的layout.ejsres.view({ layout: "different_layout" })
layout.ejs会(a)不调用assets.js()但是有&lt;脚本&gt;对于所有需要的js文件,或者(b)调用assets.js()来为./assets/js plus&lt;中的所有常见js文件提供服务。脚本&gt;服务于居住在其他地方的页面依赖者。
答案 2 :(得分:1)
我有一个assets.js()包装器,允许您包含除指定文件之外的所有资源。您还可以使用它在其他地方仅包含特定资产。因此,您可以在布局中加载公共资产,并仅在需要它们的页面上包含其他资产。
请参阅我对How can I include javascript assets selectively in SailsJS?
的回答