rails 应用程序 public/packs 中 application.js 文件过大的原因? / 机架超时错误
cause of excessively large application.js file in public/packs for rails app? / rack timeout error
我的应用程序经常抛出机架超时错误,我想我已将问题缩小到已编译的 javascript 文件的大小。 public/packs/application-5db30a18f8715133f889.js 是 2.1mb。这是不可行的!
需要注意的是我有两个资产文件夹:一个用于我所有 css 和大多数 js 所在的 sprockets,另一个用于 webpacker,我添加它只是为了使用名为 Upp 的图像上传节点包。我打算完全转向 webpacker,但还没有。这是我的 app/assets/application.js:
//= require jquery
//= require jquery_ujs
//= require turbolinks
//= require cable
//= require_tree ./channels
//= require semantic-ui/dist/semantic
//= require micromodal/dist/micromodal
//= require local-time
//= require micromodal
//= require init
这是app/webpacker/packs/application.js:
console.log('Hello World from Webpacker')
import fileUpload from 'fileUpload'
document.addEventListener('turbolinks:load', () => {
document.querySelectorAll('.upload-file').forEach(fileInput => {
fileUpload(fileInput)
})
})
我是不是在 app/assets/application.js 中做错了什么会导致如此巨大的文件大小?
顺便说一下,这是 webpacker 在控制台中显示的内容:
Version: webpack 4.46.0
Time: 5357ms
Built at: 03/01/2021 12:16:43 AM
Asset Size Chunks Chunk Names
js/application-62fd5a37239b6e18973d.js 737 KiB 0 [emitted] [immutable] [big] application
js/application-62fd5a37239b6e18973d.js.LICENSE.txt 1.08 KiB [emitted]
js/application-62fd5a37239b6e18973d.js.br 135 KiB [emitted]
js/application-62fd5a37239b6e18973d.js.gz 182 KiB [emitted]
js/application-62fd5a37239b6e18973d.js.map 2.16 MiB 0 [emitted] [dev] application
js/application-62fd5a37239b6e18973d.js.map.br 424 KiB [emitted] [big]
js/application-62fd5a37239b6e18973d.js.map.gz 558 KiB [emitted] [big]
manifest.json 364 bytes [emitted]
manifest.json.br 129 bytes [emitted]
manifest.json.gz 142 bytes [emitted]
Entrypoint application [big] = js/application-62fd5a37239b6e18973d.js js/application-62fd5a37239b6e18973d.js.map
值得一提的是我没有webpacker.config.js
。我应该吗?
捆绑分析器截图:
如果您说问题出在 packs/application
,我会添加 https://www.npmjs.com/package/webpack-bundle-analyzer 以查看 webpacker 在该文件中添加了什么。
这是我的 webpack/development.js
的样子:
process.env.NODE_ENV = process.env.NODE_ENV || 'development';
const { BundleAnalyzerPlugin } = require('webpack-bundle-analyzer');
const environment = require('./environment');
environment.plugins.append('BundleAnalyzerPlugin', new BundleAnalyzerPlugin());
...
其他一切都非常简单。查看当您启动 webpacker 并将鼠标悬停在其内容上时弹出的新选项卡。
更新
uppy
好像加载了两次。保留一个版本应该会减少包的大小。如果这还不够,那么您可以查看 Lazy Loading, Code Splitting and https://loadable-components.com/docs/library-splitting/。理想情况下,您应该只在需要的页面上加载文件上传逻辑。在 packs/application
中看到它告诉我您正在加载每个页面。
我的应用程序经常抛出机架超时错误,我想我已将问题缩小到已编译的 javascript 文件的大小。 public/packs/application-5db30a18f8715133f889.js 是 2.1mb。这是不可行的!
需要注意的是我有两个资产文件夹:一个用于我所有 css 和大多数 js 所在的 sprockets,另一个用于 webpacker,我添加它只是为了使用名为 Upp 的图像上传节点包。我打算完全转向 webpacker,但还没有。这是我的 app/assets/application.js:
//= require jquery
//= require jquery_ujs
//= require turbolinks
//= require cable
//= require_tree ./channels
//= require semantic-ui/dist/semantic
//= require micromodal/dist/micromodal
//= require local-time
//= require micromodal
//= require init
这是app/webpacker/packs/application.js:
console.log('Hello World from Webpacker')
import fileUpload from 'fileUpload'
document.addEventListener('turbolinks:load', () => {
document.querySelectorAll('.upload-file').forEach(fileInput => {
fileUpload(fileInput)
})
})
我是不是在 app/assets/application.js 中做错了什么会导致如此巨大的文件大小?
顺便说一下,这是 webpacker 在控制台中显示的内容:
Version: webpack 4.46.0
Time: 5357ms
Built at: 03/01/2021 12:16:43 AM
Asset Size Chunks Chunk Names
js/application-62fd5a37239b6e18973d.js 737 KiB 0 [emitted] [immutable] [big] application
js/application-62fd5a37239b6e18973d.js.LICENSE.txt 1.08 KiB [emitted]
js/application-62fd5a37239b6e18973d.js.br 135 KiB [emitted]
js/application-62fd5a37239b6e18973d.js.gz 182 KiB [emitted]
js/application-62fd5a37239b6e18973d.js.map 2.16 MiB 0 [emitted] [dev] application
js/application-62fd5a37239b6e18973d.js.map.br 424 KiB [emitted] [big]
js/application-62fd5a37239b6e18973d.js.map.gz 558 KiB [emitted] [big]
manifest.json 364 bytes [emitted]
manifest.json.br 129 bytes [emitted]
manifest.json.gz 142 bytes [emitted]
Entrypoint application [big] = js/application-62fd5a37239b6e18973d.js js/application-62fd5a37239b6e18973d.js.map
值得一提的是我没有webpacker.config.js
。我应该吗?
捆绑分析器截图:
如果您说问题出在 packs/application
,我会添加 https://www.npmjs.com/package/webpack-bundle-analyzer 以查看 webpacker 在该文件中添加了什么。
这是我的 webpack/development.js
的样子:
process.env.NODE_ENV = process.env.NODE_ENV || 'development';
const { BundleAnalyzerPlugin } = require('webpack-bundle-analyzer');
const environment = require('./environment');
environment.plugins.append('BundleAnalyzerPlugin', new BundleAnalyzerPlugin());
...
其他一切都非常简单。查看当您启动 webpacker 并将鼠标悬停在其内容上时弹出的新选项卡。
更新
uppy
好像加载了两次。保留一个版本应该会减少包的大小。如果这还不够,那么您可以查看 Lazy Loading, Code Splitting and https://loadable-components.com/docs/library-splitting/。理想情况下,您应该只在需要的页面上加载文件上传逻辑。在 packs/application
中看到它告诉我您正在加载每个页面。