[原]升級項目到Rails7.0.3,使用自己手動方案編譯打包css及js資源


一、 升級Rails到當前大版本的最新小版本
1,修改Gemfile中的版本號
vim中全局替換命令:":%s/6.0.3/6.1.6/g"
2,升級gem

bundle install

升級bundle本身 

bundle update --bundler

帶版本號運行

bundle _2.3.7_ install

 

3, 運行rails升級命令"rails app:update"

rails app:update

如果報錯

rails aborted!
Psych::BadAlias: Unknown alias: default
/home/ruby/rubydev/projects/fas/config/environment.rb:5:in `<main>'
/home/ruby/rubydev/projects/fas/bin/rails:9:in `<top (required)>'
/home/ruby/rubydev/projects/fas/bin/spring:15:in `require'

 

因爲 psych這個gem的原因,解決放方案:
修改Gemfile,添加

gem 'psych', '~> 3.3'
bundle install

 

出現其他錯誤,根據提示解決,比如 可能需要 'yarn install --checkfiles'

二、升級到rails7.0.3

基本上重複上面的步驟

1,修改Gemfile中的版本號7.0.3
2,bundle
3, rails app:update


三、清理webpacker相關
1,刪除一些文件

rm package.json
rm package-lock.json
rm bin/webpack*
rm bin/yarn
rm -rf node_modules/
rm -rf public/packs/
rm yarn.lock
rm yarn-error.log

下面這幾個時必須刪掉的,否則程序不能運行

rm -rf config/webpack
rm config/webpacker.yml
rm config/initializers/assets.rb

 

2,刪除或註釋掉無用gem,因爲自己編譯資源
#gem 'sass-rails', '>= 6'
#gem 'webpacker', '~> 4.0'
#gem 'turbolinks', '~> 5'
其中webpacker是必須刪除的,否則啓動失敗。


3,刪除config/中所有的配置文件中關於assets的配置,例如

config.assets.quiet = true

 

不清除這些設置應用也無法啓動

四、修改調整application.js 及 application.scss
1,修改app/javascript/packs/application.js
如下內容一律清除

require('jquery');
window.$ = $;
window.jQuery = $;
require("@rails/ujs").start()
//require("turbolinks").start()
require("@rails/activestorage").start()
//require("channels")
require("trix")
require("@rails/actiontext")

// Uncomment to copy all static images under ../images to the output folder and reference
// them with the image_pack_tag helper in views (e.g <%= image_pack_tag 'rails.png' %>)
// or the `imagePath` JavaScript helper below.
//
// const images = require.context('../images', true)
// const imagePath = (name) => images(name, true)

const images = require.context('../images', true);
const imagePath = (name) => images(name, true);

// libraries
//require('bulma/css/bulma.min.css');
require('font-awesome/css/font-awesome.min.css')

// app's style
require('../stylesheets/application.scss');
View Code

 

2,清理app/javascript/stylesheets/application.scss,刪掉一切和自定義scss文件無關的引入。

3,處理原來打包的圖片資源

a) 原來放在app/javascript/images中的圖片資源,移動到public/images
b) 替換erb中的image_pack_tag 改爲 使用<img src>靜態引用。

<%= image_pack_tag 'logo-main.png', class: 'orbit-image'%>

修改爲===>

<img src="images/logo-main.png" class="orbit-image">

 

五、修改layouts文件中app資源引入方式
1,原來打包的第三方js、css框架(如jquery,fontAwesome)放置到public目錄下,改爲靜態引入:

<link rel="stylesheet" type="text/css" href="<%= root_path%>font-awesome/css/font-awesome.min.css"/> 
<script src="<%= root_path%>js/jquery-3.4.1/jquery.min.js"></script>

 

2,app相關js、css改爲靜態引入方式
首先,刪除如下兩行內容

<%= stylesheet_pack_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
<%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>

然後安裝下列方式添加引用。

<link rel="stylesheet" type="text/css" href="<%= root_path%>packs/app.min.css"/>
<script type="text/javascript" src="<%= root_path%>packs/app.min.js"></script>

 

六、自己實現js,scss編譯。
1,準備node環境。
安裝node
全局方式安裝esbuild

npm install -g esbuild

全局方式安裝sass

npm install -g sass

 

2,添加文件bin/web-dev-server.sh

#! /usr/bin/bash
bash `/usr/bin/esbuild ./app/javascript/packs/application.js --outfile=./public/packs/app.min.js --watch --bundle --minify --sourcemap --color=true` &
/usr/bin/node /usr/bin/sass --watch --style=compressed ./app/javascript/stylesheets/application.scss ./public/packs/app.min.css &

 

七、分發時不再需要預編譯。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章