Webpacker 抛出 application.css not found in manifest.json in *Rails 6* application
Webpacker throws application.css not found in manifest.json in *Rails 6* application
目前我们的应用程序使用 Rails 6。它在生产中运行良好,但在开发模式下会引发一些错误。请帮助我。
这就是我的 application.js 和 application.css 的样子
packs/application.js
require("@rails/ujs").start()
require("turbolinks").start()
require("@rails/activestorage").start()
require("channels")
require("jquery")
import '../stylesheets/application'
import './bootstrap_custom.js'
import './side_menu.js.erb'
//import './sweetalert.js'
import './business_hours.js'
import './admin.js'
import './services.js'
import './user_service.js'
Packs/stylesheets/application.scss
@import './bootstrap_custom.scss';
$fa-font-path: '~@fortawesome/fontawesome-free/webfonts';
@import '~@fortawesome/fontawesome-free/scss/fontawesome';
@import '~@fortawesome/fontawesome-free/scss/solid';
@import './admin_dashboard.scss';
@import './side_menu.css';
@import './fonts.scss';
@import './login.css';
我认为您应该只导入 './stylesheets/application'
一个点,因为样式表目录与您的 application.js.
处于同一级别
另外,我觉得建议在pack目录下只包含packs,其他的都在它的前一层,像这样:
app/javascript
├── stylesheets
| └── application.css
├── channels
└── packs
└── application.js
如果你这样做了,你应该再次使用两个点 '../stylesheets/application'
并确保将 webpacker 配置为在 webpacker.yml
中提取 CSS:
extract_css: true
经过长时间的努力,我找到了解决办法。谢谢@ahmed kamal。
具有相同名称但扩展名不同的多个包。
即: application.scss 和 application.js 只有最后一个会进入 webpack 入口路径配置。
解法:
1. Rename stylesheets/application.scss into stylesheets/style.scss
2. Import style.scss in application.js like this import '../stylesheets/style'
3. config/webpacker.yml make below changes
compile: true
cache_manifest: true
extract_css: true
如果此解决方案不适合您,请尝试
rake assets:precompile
这就是它对我来说一切正常的开始
检查目录名称以确保它们与 Webpacker 的输出不冲突。在我的例子中,Rails 无法找到 application.css
,即使 Webpacker 已成功编译它。
// Webpacker log output
Asset Size Chunks Chunk Names
application.js 3.62 MiB application [emitted] application
css/application-631a168a.css 332 KiB application [emitted] [immutable] application
我的相关目录结构:
app/javascript
|——packs
| └——application.js
└——src
└——assets
|——css
└——scss
└——application.scss
在我的例子中,问题是 我已经有一个名为 css
的目录,所以当 Rails 去寻找已编译的 css/application.css
,它进入了这个目录而不是 Webpacker 生成的目录,并且无法找到 application.css
.
删除冲突目录修复了它:
$ rm -rf app/javascript/src/css // change path appropriately
根据recently commit in Rails,官方修复是:
在 app/javascript/packs/application 中创建一个空文件。css
$ touch rebloom/app/javascript/packs/application.css
将 config/webpacker.yml
中的所有环境从 extract_css: false
更改为 extract_css: true
$ ruby -pi -e "sub(/extract_css: false/, 'extract_css: true')" config/webpacker.yml
将 hmr 和 inline 更改为 true dev_server in development in config/webpacker.yml (NOTE: 以下命令有效假设您没有自定义设置。以防万一,请手动更新文件)
$ ruby -pi -e "sub(/hmr: false/, 'hmr: true')" config/webpacker.yml
$ ruby -pi -e "sub(/inline: false/, 'inline: true')" config/webpacker.yml`
重要
如果您按照其他说明进行操作,请确保您没有在 config/webpacker.yml 中将生产模式的编译更改为 true
这会对您的应用程序在生产模式下的性能产生负面影响,这是没有必要的。您只需要使用
预编译资产
$ bundle exec rake assets:precompile
目前我们的应用程序使用 Rails 6。它在生产中运行良好,但在开发模式下会引发一些错误。请帮助我。
这就是我的 application.js 和 application.css 的样子
packs/application.js
require("@rails/ujs").start()
require("turbolinks").start()
require("@rails/activestorage").start()
require("channels")
require("jquery")
import '../stylesheets/application'
import './bootstrap_custom.js'
import './side_menu.js.erb'
//import './sweetalert.js'
import './business_hours.js'
import './admin.js'
import './services.js'
import './user_service.js'
Packs/stylesheets/application.scss
@import './bootstrap_custom.scss';
$fa-font-path: '~@fortawesome/fontawesome-free/webfonts';
@import '~@fortawesome/fontawesome-free/scss/fontawesome';
@import '~@fortawesome/fontawesome-free/scss/solid';
@import './admin_dashboard.scss';
@import './side_menu.css';
@import './fonts.scss';
@import './login.css';
我认为您应该只导入 './stylesheets/application'
一个点,因为样式表目录与您的 application.js.
另外,我觉得建议在pack目录下只包含packs,其他的都在它的前一层,像这样:
app/javascript
├── stylesheets
| └── application.css
├── channels
└── packs
└── application.js
如果你这样做了,你应该再次使用两个点 '../stylesheets/application'
并确保将 webpacker 配置为在 webpacker.yml
中提取 CSS:
extract_css: true
经过长时间的努力,我找到了解决办法。谢谢@ahmed kamal。
具有相同名称但扩展名不同的多个包。
即: application.scss 和 application.js 只有最后一个会进入 webpack 入口路径配置。
解法:
1. Rename stylesheets/application.scss into stylesheets/style.scss
2. Import style.scss in application.js like this import '../stylesheets/style'
3. config/webpacker.yml make below changes
compile: true
cache_manifest: true
extract_css: true
如果此解决方案不适合您,请尝试
rake assets:precompile
这就是它对我来说一切正常的开始
检查目录名称以确保它们与 Webpacker 的输出不冲突。在我的例子中,Rails 无法找到 application.css
,即使 Webpacker 已成功编译它。
// Webpacker log output
Asset Size Chunks Chunk Names
application.js 3.62 MiB application [emitted] application
css/application-631a168a.css 332 KiB application [emitted] [immutable] application
我的相关目录结构:
app/javascript
|——packs
| └——application.js
└——src
└——assets
|——css
└——scss
└——application.scss
在我的例子中,问题是 我已经有一个名为 css
的目录,所以当 Rails 去寻找已编译的 css/application.css
,它进入了这个目录而不是 Webpacker 生成的目录,并且无法找到 application.css
.
删除冲突目录修复了它:
$ rm -rf app/javascript/src/css // change path appropriately
根据recently commit in Rails,官方修复是:
在 app/javascript/packs/application 中创建一个空文件。css
$ touch rebloom/app/javascript/packs/application.css
将 config/webpacker.yml
中的所有环境从extract_css: false
更改为extract_css: true
$ ruby -pi -e "sub(/extract_css: false/, 'extract_css: true')" config/webpacker.yml
将 hmr 和 inline 更改为 true dev_server in development in config/webpacker.yml (NOTE: 以下命令有效假设您没有自定义设置。以防万一,请手动更新文件)
$ ruby -pi -e "sub(/hmr: false/, 'hmr: true')" config/webpacker.yml $ ruby -pi -e "sub(/inline: false/, 'inline: true')" config/webpacker.yml`
重要
如果您按照其他说明进行操作,请确保您没有在 config/webpacker.yml 中将生产模式的编译更改为 true 这会对您的应用程序在生产模式下的性能产生负面影响,这是没有必要的。您只需要使用
预编译资产$ bundle exec rake assets:precompile