将Sails应用程序部署到Heroku时未找到资产

将Sails应用程序部署到Heroku时未找到资产,heroku,sails.js,Heroku,Sails.js,我是个新手 我已经从Sails模板创建了一个新的web应用程序,并尝试将其上载到Heroku。除了资产,一切都很好,没有找到任何资产(js、css、图像等) 我发现Sails使用Grunt将文件复制到.tmp文件夹。我已经检查过了,并将Grunt添加到了我的package.json文件中。我还使用web:node app.js命令和它指向Heroku中production变量添加了一个Procfile 我没有更改任何Grunt任务,默认情况下,grunfile.js文件和/tasks目录是 还有

我是个新手

我已经从Sails模板创建了一个新的web应用程序,并尝试将其上载到Heroku。除了资产,一切都很好,没有找到任何资产(js、css、图像等)

我发现Sails使用Grunt将文件复制到.tmp文件夹。我已经检查过了,并将Grunt添加到了我的
package.json
文件中。我还使用
web:node app.js
命令和它指向Heroku中
production
变量添加了一个Procfile

我没有更改任何Grunt任务,默认情况下,
grunfile.js
文件和
/tasks
目录是


还有什么我可以查的吗?

解决方案很简单。事实证明,我没有为生产环境添加Grunt依赖项,只是在我的
package.json
中为开发环境添加Grunt依赖项。我添加了它们,效果非常好

"dependencies": {
    "@sailshq/connect-redis": "^3.2.1",
    "@sailshq/lodash": "^3.10.3",
    "@sailshq/socket.io-redis": "^5.2.0",
    "async": "2.0.1",
    "sails": "^1.0.2",
    "sails-hook-apianalytics": "^2.0.0",
    "sails-hook-organics": "^0.13.0",
    "sails-hook-orm": "^2.0.0-16",
    "sails-hook-sockets": "^1.4.0",
    "sails-postgresql": "^1.0.1",
    "grunt": "1.0.1", // I've added these two lines
    "sails-hook-grunt": "^3.0.2" // I've added these two lines
},
"devDependencies": {
    "@sailshq/eslint": "^4.19.3",
    "@sailshq/htmlhint": "^0.9.16",
    "@sailshq/lesshint": "^4.6.6",
    "grunt": "1.0.1",
    "sails-hook-grunt": "^3.0.2"
},

我用不同的方法解决了这个问题。除了在OP的答案中包含一些
grunt
dep之外,我还在
package.json的脚本部分添加了
postinstall

  "scripts": {
    "start": "NODE_ENV=production node app.js",
    "test": "npm run lint && npm run custom-tests && echo 'Done.'",
    "lint": "eslint . --max-warnings=0 --report-unused-disable-directives && echo '✔  Your .js files look so good.' && htmlhint -c ./.htmlhintrc views/*.ejs && htmlhint -c ./.htmlhintrc views/**/*.ejs && htmlhint -c ./.htmlhintrc views/**/**/*.ejs && htmlhint -c ./.htmlhintrc views/**/**/**/*.ejs && htmlhint -c ./.htmlhintrc views/**/**/**/**/*.ejs && htmlhint -c ./.htmlhintrc views/**/**/**/**/**/*.ejs && htmlhint -c ./.htmlhintrc views/**/**/**/**/**/**/*.ejs && echo '✔  So do your .ejs files.' && lesshint assets/styles/ --max-warnings=0 && echo '✔  Your .less files look good, too.'",
    "custom-tests": "echo \"(No other custom tests yet.)\" && echo",
    "postinstall": "grunt build", // added this
...

这对heroku的影响是需要运行grunt任务
build
,该任务编译资产并将其复制到适当的引用位置(即:
.tmp

grunt和sails hook grunt都是依赖项,因此不应添加到依赖项部分。如果您观察Heroku日志,您将看到有一个DevDependency修剪步骤,它将从您的生产环境中删除这些包。这对于保持清洁生产体系非常重要。按照Phillip M.的建议添加安装后步骤更好。感谢您的澄清!我只在这里留下我的答案,因为你的评论可能对其他人有用。我指出这一点是因为我得到了反对票,即使我已经选择了菲利普·M.的答案作为正确答案。