shakapacker 9.0.0.beta.3 ā 9.0.0.beta.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +21 -0
- data/Gemfile.lock +1 -1
- data/docs/peer-dependencies.md +23 -3
- data/docs/transpiler-performance.md +179 -0
- data/docs/v9_upgrade.md +44 -1
- data/lib/install/config/shakapacker.yml +4 -2
- data/lib/install/package.json +8 -0
- data/lib/install/template.rb +121 -51
- data/lib/shakapacker/version.rb +1 -1
- data/package/config.js +2 -2
- data/package/utils/helpers.js +66 -1
- data/package.json +1 -1
- data/test/package/rules/babel.test.js +16 -0
- data/yarn.lock +4 -4
- metadata +3 -3
- data/package-lock.json +0 -11966
data/package/utils/helpers.js
CHANGED
@@ -25,6 +25,46 @@ const canProcess = (rule, fn) => {
|
|
25
25
|
return null
|
26
26
|
}
|
27
27
|
|
28
|
+
const validateBabelDependencies = () => {
|
29
|
+
// Only validate core dependencies that are absolutely required
|
30
|
+
// Additional packages like presets are optional and project-specific
|
31
|
+
const coreRequiredPackages = ["@babel/core", "babel-loader"]
|
32
|
+
|
33
|
+
const missingCorePackages = coreRequiredPackages.filter(
|
34
|
+
(pkg) => !moduleExists(pkg)
|
35
|
+
)
|
36
|
+
|
37
|
+
if (missingCorePackages.length > 0) {
|
38
|
+
const installCommand = `npm install --save-dev ${missingCorePackages.join(" ")}`
|
39
|
+
|
40
|
+
// Check for commonly needed packages and suggest them
|
41
|
+
const suggestedPackages = [
|
42
|
+
"@babel/preset-env",
|
43
|
+
"@babel/plugin-transform-runtime",
|
44
|
+
"@babel/runtime"
|
45
|
+
]
|
46
|
+
|
47
|
+
const missingSuggested = suggestedPackages.filter(
|
48
|
+
(pkg) => !moduleExists(pkg)
|
49
|
+
)
|
50
|
+
let additionalHelp = ""
|
51
|
+
|
52
|
+
if (missingSuggested.length > 0) {
|
53
|
+
additionalHelp =
|
54
|
+
`\n\nYou may also need: ${missingSuggested.join(", ")}\n` +
|
55
|
+
`Install with: npm install --save-dev ${missingSuggested.join(" ")}`
|
56
|
+
}
|
57
|
+
|
58
|
+
throw new Error(
|
59
|
+
`Babel is configured but core packages are missing: ${missingCorePackages.join(", ")}\n\n` +
|
60
|
+
`To fix this, run:\n ${installCommand}${additionalHelp}\n\n` +
|
61
|
+
`š” Tip: Consider migrating to SWC for 20x faster compilation:\n` +
|
62
|
+
` 1. Set javascript_transpiler: 'swc' in config/shakapacker.yml\n` +
|
63
|
+
` 2. Run: npm install @swc/core swc-loader`
|
64
|
+
)
|
65
|
+
}
|
66
|
+
}
|
67
|
+
|
28
68
|
const loaderMatches = (configLoader, loaderToCheck, fn) => {
|
29
69
|
if (configLoader !== loaderToCheck) {
|
30
70
|
return null
|
@@ -32,9 +72,33 @@ const loaderMatches = (configLoader, loaderToCheck, fn) => {
|
|
32
72
|
|
33
73
|
const loaderName = `${configLoader}-loader`
|
34
74
|
|
75
|
+
// Special validation for babel to check all dependencies
|
76
|
+
if (configLoader === "babel") {
|
77
|
+
validateBabelDependencies()
|
78
|
+
}
|
79
|
+
|
35
80
|
if (!moduleExists(loaderName)) {
|
81
|
+
let installCommand = ""
|
82
|
+
let migrationHelp = ""
|
83
|
+
|
84
|
+
if (configLoader === "babel") {
|
85
|
+
installCommand =
|
86
|
+
"npm install --save-dev babel-loader @babel/core @babel/preset-env @babel/plugin-transform-runtime @babel/runtime"
|
87
|
+
migrationHelp =
|
88
|
+
"\n\nš” Tip: Consider migrating to SWC for 20x faster compilation:\n" +
|
89
|
+
" 1. Set javascript_transpiler: 'swc' in config/shakapacker.yml\n" +
|
90
|
+
" 2. Run: npm install @swc/core swc-loader"
|
91
|
+
} else if (configLoader === "swc") {
|
92
|
+
installCommand = "npm install --save-dev @swc/core swc-loader"
|
93
|
+
migrationHelp =
|
94
|
+
"\n\n⨠SWC is 20x faster than Babel with zero configuration!"
|
95
|
+
} else if (configLoader === "esbuild") {
|
96
|
+
installCommand = "npm install --save-dev esbuild esbuild-loader"
|
97
|
+
}
|
98
|
+
|
36
99
|
throw new Error(
|
37
|
-
`Your Shakapacker config specified using ${configLoader}, but ${loaderName} package is not installed
|
100
|
+
`Your Shakapacker config specified using ${configLoader}, but ${loaderName} package is not installed.\n\n` +
|
101
|
+
`To fix this, run:\n ${installCommand}${migrationHelp}`
|
38
102
|
)
|
39
103
|
}
|
40
104
|
|
@@ -56,6 +120,7 @@ module.exports = {
|
|
56
120
|
ensureTrailingSlash,
|
57
121
|
canProcess,
|
58
122
|
moduleExists,
|
123
|
+
validateBabelDependencies,
|
59
124
|
loaderMatches,
|
60
125
|
packageFullVersion,
|
61
126
|
packageMajorVersion
|
data/package.json
CHANGED
@@ -11,6 +11,7 @@ jest.mock("../../../package/config", () => {
|
|
11
11
|
const original = jest.requireActual("../../../package/config")
|
12
12
|
return {
|
13
13
|
...original,
|
14
|
+
javascript_transpiler: "babel", // Force babel for this test
|
14
15
|
additional_paths: [...original.additional_paths, "node_modules/included"]
|
15
16
|
}
|
16
17
|
})
|
@@ -32,6 +33,21 @@ const createWebpackConfig = (file, use) => ({
|
|
32
33
|
})
|
33
34
|
|
34
35
|
describe("babel", () => {
|
36
|
+
// Mock validateBabelDependencies to avoid actual dependency checking in tests
|
37
|
+
beforeAll(() => {
|
38
|
+
jest.mock("../../../package/utils/helpers", () => {
|
39
|
+
const original = jest.requireActual("../../../package/utils/helpers")
|
40
|
+
return {
|
41
|
+
...original,
|
42
|
+
validateBabelDependencies: jest.fn() // Mock to do nothing
|
43
|
+
}
|
44
|
+
})
|
45
|
+
})
|
46
|
+
|
47
|
+
afterAll(() => {
|
48
|
+
jest.unmock("../../../package/utils/helpers")
|
49
|
+
})
|
50
|
+
|
35
51
|
test("process source path", async () => {
|
36
52
|
const normalPath = `${pathToAppJavascript}/a.js`
|
37
53
|
const [tracked, loader] = createTrackLoader()
|
data/yarn.lock
CHANGED
@@ -1042,7 +1042,7 @@
|
|
1042
1042
|
|
1043
1043
|
"@types/eslint-scope@^3.7.3", "@types/eslint-scope@^3.7.7":
|
1044
1044
|
version "3.7.7"
|
1045
|
-
resolved "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz"
|
1045
|
+
resolved "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz#3108bd5f18b0cdb277c867b3dd449c9ed7079ac5"
|
1046
1046
|
integrity sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==
|
1047
1047
|
dependencies:
|
1048
1048
|
"@types/eslint" "*"
|
@@ -1389,7 +1389,7 @@
|
|
1389
1389
|
|
1390
1390
|
"@webassemblyjs/wasm-edit@^1.12.1", "@webassemblyjs/wasm-edit@^1.14.1":
|
1391
1391
|
version "1.14.1"
|
1392
|
-
resolved "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz"
|
1392
|
+
resolved "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz#ac6689f502219b59198ddec42dcd496b1004d597"
|
1393
1393
|
integrity sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==
|
1394
1394
|
dependencies:
|
1395
1395
|
"@webassemblyjs/ast" "1.14.1"
|
@@ -5629,7 +5629,7 @@ tapable@^2.1.1, tapable@^2.2.0, tapable@^2.2.1:
|
|
5629
5629
|
|
5630
5630
|
terser-webpack-plugin@^5.3.10, terser-webpack-plugin@^5.3.11:
|
5631
5631
|
version "5.3.14"
|
5632
|
-
resolved "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz"
|
5632
|
+
resolved "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz#9031d48e57ab27567f02ace85c7d690db66c3e06"
|
5633
5633
|
integrity sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==
|
5634
5634
|
dependencies:
|
5635
5635
|
"@jridgewell/trace-mapping" "^0.3.25"
|
@@ -6166,7 +6166,7 @@ which@^2.0.1:
|
|
6166
6166
|
|
6167
6167
|
wildcard@^2.0.0, wildcard@^2.0.1:
|
6168
6168
|
version "2.0.1"
|
6169
|
-
resolved "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz"
|
6169
|
+
resolved "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67"
|
6170
6170
|
integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==
|
6171
6171
|
|
6172
6172
|
word-wrap@^1.2.5:
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: shakapacker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 9.0.0.beta.
|
4
|
+
version: 9.0.0.beta.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Heinemeier Hansson
|
@@ -178,6 +178,7 @@ files:
|
|
178
178
|
- docs/sprockets.md
|
179
179
|
- docs/style_loader_vs_mini_css.md
|
180
180
|
- docs/subresource_integrity.md
|
181
|
+
- docs/transpiler-performance.md
|
181
182
|
- docs/troubleshooting.md
|
182
183
|
- docs/using_esbuild_loader.md
|
183
184
|
- docs/using_swc_loader.md
|
@@ -239,7 +240,6 @@ files:
|
|
239
240
|
- lib/tasks/shakapacker/install.rake
|
240
241
|
- lib/tasks/shakapacker/verify_config.rake
|
241
242
|
- lib/tasks/shakapacker/verify_install.rake
|
242
|
-
- package-lock.json
|
243
243
|
- package.json
|
244
244
|
- package/babel/preset.js
|
245
245
|
- package/config.js
|
@@ -314,7 +314,7 @@ homepage: https://github.com/shakacode/shakapacker
|
|
314
314
|
licenses:
|
315
315
|
- MIT
|
316
316
|
metadata:
|
317
|
-
source_code_uri: https://github.com/shakacode/shakapacker/tree/v9.0.0.beta.
|
317
|
+
source_code_uri: https://github.com/shakacode/shakapacker/tree/v9.0.0.beta.4
|
318
318
|
rdoc_options: []
|
319
319
|
require_paths:
|
320
320
|
- lib
|