我正在使用我的rails 5.1 app纱线(不是webpacker,只是默认的资产管道) .
在开发环境中运行本地服务器,我的资产没有遇到任何问题 .
但是一旦我预编译我的资产(环境无关紧要)或让Heroku打包我的资产,我从 application.sass
文件中导入的所有样式表(节点模块)都不再起作用了 .
这种行为的原因是sass将所有文件编译成一个输出文件,但由于某种原因似乎错过了包含节点模块的 @import
语句并分别加载这些文件 .
所以这:
@import "components/index.sass"
@import "nodemodule/nodemodule.css"
在开发中编译到这个:
// content of "components/index.sass"
// content of "nodemodule/nodemodule.css"
在 生产环境 中:
// content of "components/index.sass"
@import "nodemodule/nodemodule.css"
虽然单独加载 node_module/nodemodule.css
作为资产,但浏览器无法解析它 . Javascript工作正常 .
3 回答
链接来自我的项目,您可以在asset.rb中将其用作参考,您需要在默认的load_path中包含
/node_modules
路径 .如果打开
rails console
并输入Rails.application.config.assets.paths
,您应该看到添加了新路径/yourproject/node_modules
.然后你只需写:
在我的情况下我的application.scss中的bootstrap 4
对应于
node_modules/bootstrap/scss/bootstrap.scss
中的文件对于
jquery.js
和bootstrap.js
,您可以查看我的application.js例如,node_modules需要与
npm install
一起安装,因此它们可能没有安装在Heroku上 . 看看https://devcenter.heroku.com/articles/using-multiple-buildpacks-for-an-app最有可能的是,您需要设置一个Node.js buildpack来安装您的npm依赖项 .
我终于找到了问题 . 这是一个非常令人讨厌的
sass-rails
宝石的错误和Rails的sprockets
组件的不幸设计 .1)sass-rails
@import
似乎不适用于node_modules
,因为它与其他资产一样 . 当这些其他资产被编译成一个文件时,node_modules
仅被引用,由浏览器作为单独的源加载,但最终不被浏览器使用 .2)链轮
Sprockets的
require
语句只有在文件的开头才有效 . 或者他们把它放在他们的_1097906中:但是,就我而言,我从一个本身从
application.sass
导入的文件中导入指令 .