Sails js 9.4 - 资产未被复制

时间:2013-12-01 20:36:39

标签: sails.js

第一帆并没有创建.tmp / public,所以我手动完成了。但它也没有将资源从我的资源文件夹复制到我的公共文件夹。有人可以解释为什么会这样吗?

当时,我得到的答案没有帮助, 我现在更新到9.8,我似乎没有任何问题。

4 个答案:

答案 0 :(得分:11)

我有同样的问题。运行sails lift时,未创建.tmp文件夹。最终对我有用的是在我的sails应用程序的根文件夹中本地安装Grunt。所以只需在你的sails app文件夹中运行npm install grunt即可。使用-g标志全局安装Grunt显然是不够的。本地安装后,您可以再次运行sails lift,并创建.tmp文件夹 希望这有帮助!

答案 1 :(得分:5)

我将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

答案 2 :(得分:2)

Grunt似乎没有在我的安装上执行任何,包括复制assets文件夹。我在Rob Wormald的Google Group上发现了这篇帖子,终于让它为我工作了:

在.sailsrc文件的项目根目录中,删除“grunt”:false行。那会让事情变得有效。

这是我认为应该在下一个版本中纠正的其中一个生成器的问题。

答案 3 :(得分:1)

您需要在sails项目根目录中检查Gruntfile.js,一切都会更容易理解。这是一些简短的解释:

  • 升力过程中的'魔法'隐藏在Grunt任务中。
  • 如果Sails没有在你的项目中创建.tmp / public目录,那可能是因为权限或类似的东西(它发生在Windows上,据我所知,我没有在Linux上)。解决方案是手动创建.tmp / public目录并确保它是可写的。
  • 要将资产复制到.tmp / public,您需要将其保留在assets / linker目录中,或根据您的特定需要更新Gruntfile.js。

我希望这有帮助:)。