Sailsjs禁用单个js

时间:2013-06-25 16:06:26

标签: sails.js

现在,我正在使用<%- assets.js() %>在所有网页上包含所有javascript文件。因此,这意味着所有功能都将在所有页面上初始化。

我想知道如何在特定网页上禁用javascript文件?或者,如果有办法在特定网页上包含一些javascript文件,但不是所有的javascript文件。

3 个答案:

答案 0 :(得分:4)

自动加载的问题在于,以任何有意义的方式决定源文件的排序真的很难 - 这实际上取决于你如何构建前端。

在v0.8.x(您正在使用的版本中,我可以告诉您),您可以使用config/assets.js来控制加载的文件夹的排序。这不太理想,但是我的团队在几个项目中使用了一个不错的解决方法。

在v0.9中,我们删除了操纵/资产机架,转而采用紧密集成Grunt,它具有大型社区和一些非常酷且维护良好的软件包,适用于大多数类型的资产捆绑等。

在任何情况下,以下是您可以调查在新版Sails.js中为资产提供服务的不同方法:

  1. 对待它就像其他任何事情一样

    layout.ejs文件中,创建<link /><script></script>标记,以便像平常一样链接到css和javascript文件中。

  2. 使用AMD(Require.JS)

    我想很多人会说这实际上是最好的选择。要求是一个非常强大的工具。而且我大多都同意 - 如果你正在处理可能来自任何地方的前端javascript,并且将由可能使用不同框架的其他开发人员进行扩展,那么AMD是一个很好的制作方法。确保你保持安全。如果你正在使用Require,那么每个js文件都是它自己的模块,并声明它自己的依赖项,因此资产依赖管理就成了过去。然后在生产模式中,有几个不同的选项来编译和缩小CSS和JS。您甚至可以使用Require从JS动态加载模板和CSS,这非常简洁。如果您对以异步方式加载部分或全部资产感兴趣,AMD / RequireJS是一个不折不扣的赢家。它也是一个全客户端解决方案,非常酷。

    我心中唯一的缺点是复杂性。如果您可以控制正在使用的框架,那么您真的不必手动输入每个文件的依赖关系 - 它可以自己解决(参见https://github.com/balderdashy/mast/blob/2.x/lib/raise.js

  3. 使用Grunt

    在Sails v0.9中使用sails new foo创建新项目时,会创建一个名为Gruntfile.js的文件。它有很多东西,其中很多都没有被默认使用。您几乎可以使用Grunt做任何事情,但特别是,您需要了解如何设置将文件从assets/*复制到.tmp/public/

  4. sails new foo --linker(仅适用于v0.9)

    Linker很像资产架/装配当前所做的事情。它创建与上面#3相同的Gruntfile,但使用了更多内容。它将按您指定的顺序自动链接文件。 <%= %>插件允许您自定义将注入js,css和templates的分隔符,而不是查看partials(例如scriptlinker)。默认情况下,Gruntfile设置为使用JST预编译模板,但同样,您可以根据需要进行设置。

  5. 希望有帮助的人,祝你好运!

    -Mike

    PS-v0.9即将推出,我刚刚完成测试和问题,以确保我们100%在那里。如果您想尝试一下,请查看:

    https://gist.github.com/mikermcneil/5930330

答案 1 :(得分:1)

Sailsjs的负责人回答了这个问题(虽然它是关于选择CSS文件):

“目前,您可以(a)始终引入所有样式并仅使相关的样式适用(b)使用其他工具(如Grunt)捆绑资产,就像在vanilla node.js项目中一样(c)手动链接样式表(将它们放在公共文件夹中)。“

请参阅:choosing assets sailsjs

类似地,Google小组提出了更复杂的问题: https://groups.google.com/forum/#!topic/sailsjs/yt9EpJlfzXA

考虑到上述情况,您可能希望每个页面都有一个单独的layout.ejs。您可以使用

为每个页面指定所需的layout.ejs
res.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?

的回答