我正在使用我的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工作正常。
答案 0 :(得分:7)
链接来自我的项目,您可以将其用作参考
在asset.rb
中,您需要在默认的load_path中包含/node_modules
路径。
如果您打开rails console
并输入Rails.application.config.assets.paths
,则会看到新添加的路径/yourproject/node_modules
。
然后你只需写:
@import "nodemodule.css"
中的bootstrap 4
@import bootstrap/scss/bootstrap
,对应node_modules/bootstrap/scss/bootstrap.scss
jquery.js
和bootstrap.js
您可以查看我的application.js
答案 1 :(得分:4)
我遇到了同样的问题。受this comment从导入中删除文件扩展名的启发,最终解决了该问题。
这不起作用:
@import "@shopify/polaris/styles.css";
@import "@uppy/core/dist/style.css";
@import "@uppy/dashboard/dist/style.css";
这样做的时候:
@import "@shopify/polaris/styles";
@import "@uppy/core/dist/style";
@import "@uppy/dashboard/dist/style";
答案 2 :(得分:2)
我终于找到了问题。这是loaded_graph = tf.Graph()
with tf.Session(graph=loaded_graph) as sess:
sess.run(tf.global_variables_initializer())
new_saver = tf.train.import_meta_graph(args.model_meta_filename)
new_saver.restore(sess, tf.train.latest_checkpoint('./'))
softmax_probabilities = loaded_graph.get_tensor_by_name('softmax_probabilities:0')
data_placeholder = loaded_graph.get_tensor_by_name('data_placeholder:0')
dropout_keep_proportion_placeholder = loaded_graph.get_tensor_by_name('dropout_keep_proportion_placeholder:0')
p = [x[1] for x in softmax_probabilities.eval({data_placeholder: data, dropout_keep_proportion_placeholder: 1.0})]
print(p)
宝石的一个非常讨厌的错误。 Rails的sass-rails
组件的不幸设计。
sprockets
sass-rails
似乎与@import
不同,与其他资产一样。当这些其他资产被编译到一个文件中时,node_modules
仅被引用,由浏览器作为单独的源加载,但最终不被浏览器使用。
node_modules
Sprockets'sprockets
语句仅在文件开头处有效。或者他们把它放在documentation:
注意:只有在任何应用程序代码出现之前,才会处理指令。一旦你有一行不包含注释或空格,那么Sprockets将停止寻找指令。如果您在文档的“标题”之外使用指令,它将不会执行任何操作,并且不会引发任何错误。
但是,就我而言,我从一个本身是从require
导入的文件中导入指令。
答案 3 :(得分:1)
例如,node_modules需要与AVCaptureMovieFileOutput
一起安装,因此它们可能没有安装在Heroku上。查看https://devcenter.heroku.com/articles/using-multiple-buildpacks-for-an-app
最有可能的是,你需要设置一个Node.js buildpack来安装你的npm依赖项。