shakapacker 9.0.0.beta.0 → 9.0.0.beta.2
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/.github/workflows/claude-code-review.yml +54 -0
- data/.github/workflows/claude.yml +50 -0
- data/.rubocop.yml +1 -0
- data/CHANGELOG.md +6 -2
- data/Gemfile.lock +1 -1
- data/Rakefile +18 -1
- data/docs/rspack.md +7 -7
- data/docs/rspack_migration_guide.md +202 -0
- data/docs/using_esbuild_loader.md +3 -3
- data/docs/using_swc_loader.md +5 -3
- data/lib/install/bin/shakapacker +3 -17
- data/lib/install/config/shakapacker.yml +5 -4
- data/lib/shakapacker/configuration.rb +36 -3
- data/lib/shakapacker/dev_server_runner.rb +19 -9
- data/lib/shakapacker/manifest.rb +4 -3
- data/lib/shakapacker/rspack_runner.rb +4 -42
- data/lib/shakapacker/runner.rb +105 -11
- data/lib/shakapacker/utils/manager.rb +2 -0
- data/lib/shakapacker/version.rb +1 -1
- data/lib/shakapacker/version_checker.rb +1 -1
- data/lib/shakapacker/webpack_runner.rb +4 -42
- data/lib/tasks/shakapacker/install.rake +6 -2
- data/package/config.js +24 -0
- data/package/environments/base.js +12 -2
- data/package/environments/development.js +52 -12
- data/package/environments/production.js +8 -3
- data/package/environments/test.js +5 -3
- data/package/index.d.ts +57 -29
- data/package/index.js +1 -1
- data/package/optimization/rspack.js +9 -5
- data/package/plugins/rspack.js +12 -28
- data/package/rspack/index.js +57 -0
- data/package/rules/babel.js +2 -2
- data/package/rules/esbuild.js +2 -2
- data/package/rules/raw.js +5 -5
- data/package/rules/rspack.js +73 -7
- data/package/rules/swc.js +2 -2
- data/package/utils/debug.js +49 -0
- data/package/utils/getStyleRule.js +3 -3
- data/package/utils/requireOrError.js +1 -1
- data/package/utils/validateDependencies.js +61 -0
- data/package/webpackDevServerConfig.js +2 -0
- data/package.json +1 -1
- data/test/package/rules/esbuild.test.js +1 -1
- data/test/package/rules/swc.test.js +1 -1
- metadata +8 -3
- data/lib/install/bin/shakapacker-rspack +0 -13
@@ -1,6 +1,7 @@
|
|
1
1
|
const { requireOrError } = require("../utils/requireOrError")
|
2
|
+
const { error: logError } = require("../utils/debug")
|
2
3
|
|
3
|
-
const
|
4
|
+
const rspack = requireOrError("@rspack/core")
|
4
5
|
|
5
6
|
const getOptimization = () => {
|
6
7
|
// Use Rspack's built-in minification instead of terser-webpack-plugin
|
@@ -11,10 +12,13 @@ const getOptimization = () => {
|
|
11
12
|
new rspack.LightningCssMinimizerRspackPlugin()
|
12
13
|
]
|
13
14
|
} catch (error) {
|
14
|
-
//
|
15
|
-
|
16
|
-
|
17
|
-
|
15
|
+
// Log full error with stack trace
|
16
|
+
logError(
|
17
|
+
`Failed to configure Rspack minimizers: ${error.message}\n${error.stack}`
|
18
|
+
)
|
19
|
+
// Re-throw the error to properly propagate it
|
20
|
+
throw new Error(
|
21
|
+
`Could not configure Rspack minimizers: ${error.message}. Please check that @rspack/core is properly installed.`
|
18
22
|
)
|
19
23
|
}
|
20
24
|
return result
|
data/package/plugins/rspack.js
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
const { existsSync, readFileSync } = require("fs")
|
2
1
|
const { requireOrError } = require("../utils/requireOrError")
|
3
2
|
|
4
3
|
const { RspackManifestPlugin } = requireOrError("rspack-manifest-plugin")
|
@@ -16,27 +15,7 @@ const getPlugins = () => {
|
|
16
15
|
writeToFileEmit: true,
|
17
16
|
// rspack-manifest-plugin uses different option names than webpack-assets-manifest
|
18
17
|
generate: (seed, files, entrypoints) => {
|
19
|
-
|
20
|
-
|
21
|
-
// Load existing manifest if it exists to handle concurrent builds
|
22
|
-
try {
|
23
|
-
if (existsSync(config.manifestPath)) {
|
24
|
-
const existingContent = readFileSync(config.manifestPath, "utf8")
|
25
|
-
const parsed = JSON.parse(existingContent)
|
26
|
-
if (parsed && typeof parsed === "object") {
|
27
|
-
manifest = {
|
28
|
-
...manifest,
|
29
|
-
...parsed
|
30
|
-
}
|
31
|
-
}
|
32
|
-
}
|
33
|
-
} catch (error) {
|
34
|
-
// eslint-disable-next-line no-console
|
35
|
-
console.warn(
|
36
|
-
"[SHAKAPACKER]: Warning: Could not read existing manifest.json:",
|
37
|
-
String(error)
|
38
|
-
)
|
39
|
-
}
|
18
|
+
const manifest = seed || {}
|
40
19
|
|
41
20
|
// Add files mapping first
|
42
21
|
files.forEach((file) => {
|
@@ -47,12 +26,17 @@ const getPlugins = () => {
|
|
47
26
|
const entrypointsManifest = {}
|
48
27
|
Object.entries(entrypoints).forEach(
|
49
28
|
([entrypointName, entrypointFiles]) => {
|
50
|
-
const jsFiles = entrypointFiles
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
29
|
+
const jsFiles = entrypointFiles
|
30
|
+
.filter(
|
31
|
+
(file) => file.endsWith(".js") && !file.includes(".hot-update.")
|
32
|
+
)
|
33
|
+
.map((file) => config.publicPathWithoutCDN + file)
|
34
|
+
const cssFiles = entrypointFiles
|
35
|
+
.filter(
|
36
|
+
(file) =>
|
37
|
+
file.endsWith(".css") && !file.includes(".hot-update.")
|
38
|
+
)
|
39
|
+
.map((file) => config.publicPathWithoutCDN + file)
|
56
40
|
|
57
41
|
entrypointsManifest[entrypointName] = {
|
58
42
|
assets: {
|
@@ -0,0 +1,57 @@
|
|
1
|
+
/* eslint global-require: 0 */
|
2
|
+
/* eslint import/no-dynamic-require: 0 */
|
3
|
+
|
4
|
+
const webpackMerge = require("webpack-merge")
|
5
|
+
const { resolve } = require("path")
|
6
|
+
const { existsSync } = require("fs")
|
7
|
+
const config = require("../config")
|
8
|
+
const baseConfig = require("../environments/base")
|
9
|
+
|
10
|
+
const rulesPath = resolve(__dirname, "../rules", "rspack.js")
|
11
|
+
const rules = require(rulesPath)
|
12
|
+
const devServer = require("../dev_server")
|
13
|
+
const env = require("../env")
|
14
|
+
const { moduleExists, canProcess } = require("../utils/helpers")
|
15
|
+
const inliningCss = require("../utils/inliningCss")
|
16
|
+
const { getPlugins } = require("../plugins/rspack")
|
17
|
+
const { getOptimization } = require("../optimization/rspack")
|
18
|
+
const { validateRspackDependencies } = require("../utils/validateDependencies")
|
19
|
+
|
20
|
+
const generateRspackConfig = (extraConfig = {}, ...extraArgs) => {
|
21
|
+
// Validate required dependencies first
|
22
|
+
validateRspackDependencies()
|
23
|
+
if (extraArgs.length > 0) {
|
24
|
+
throw new Error(
|
25
|
+
"Only one extra config may be passed here - use webpack-merge to merge configs before passing them to Shakapacker"
|
26
|
+
)
|
27
|
+
}
|
28
|
+
|
29
|
+
const { nodeEnv } = env
|
30
|
+
const path = resolve(__dirname, "../environments", `${nodeEnv}.js`)
|
31
|
+
const environmentConfig = existsSync(path) ? require(path) : baseConfig
|
32
|
+
|
33
|
+
// Create base rspack config
|
34
|
+
const rspackConfig = {
|
35
|
+
...environmentConfig,
|
36
|
+
module: {
|
37
|
+
rules
|
38
|
+
},
|
39
|
+
plugins: getPlugins(),
|
40
|
+
optimization: getOptimization()
|
41
|
+
}
|
42
|
+
|
43
|
+
return webpackMerge.merge({}, rspackConfig, extraConfig)
|
44
|
+
}
|
45
|
+
|
46
|
+
module.exports = {
|
47
|
+
config, // shakapacker.yml
|
48
|
+
devServer,
|
49
|
+
generateRspackConfig,
|
50
|
+
baseConfig,
|
51
|
+
env,
|
52
|
+
rules,
|
53
|
+
moduleExists,
|
54
|
+
canProcess,
|
55
|
+
inliningCss,
|
56
|
+
...webpackMerge
|
57
|
+
}
|
data/package/rules/babel.js
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
const { loaderMatches } = require("../utils/helpers")
|
2
|
-
const {
|
2
|
+
const { javascript_transpiler: javascriptTranspiler } = require("../config")
|
3
3
|
const { isProduction } = require("../env")
|
4
4
|
const jscommon = require("./jscommon")
|
5
5
|
|
6
|
-
module.exports = loaderMatches(
|
6
|
+
module.exports = loaderMatches(javascriptTranspiler, "babel", () => ({
|
7
7
|
test: /\.(js|jsx|mjs|ts|tsx|coffee)?(\.erb)?$/,
|
8
8
|
...jscommon,
|
9
9
|
use: [
|
data/package/rules/esbuild.js
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
const { loaderMatches } = require("../utils/helpers")
|
2
2
|
const { getEsbuildLoaderConfig } = require("../esbuild")
|
3
|
-
const {
|
3
|
+
const { javascript_transpiler: javascriptTranspiler } = require("../config")
|
4
4
|
const jscommon = require("./jscommon")
|
5
5
|
|
6
|
-
module.exports = loaderMatches(
|
6
|
+
module.exports = loaderMatches(javascriptTranspiler, "esbuild", () => ({
|
7
7
|
test: /\.(ts|tsx|js|jsx|mjs|coffee)?(\.erb)?$/,
|
8
8
|
...jscommon,
|
9
9
|
use: ({ resource }) => getEsbuildLoaderConfig(resource)
|
data/package/rules/raw.js
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
const config = require("../config")
|
2
2
|
|
3
|
-
const rspackRawConfig = {
|
3
|
+
const rspackRawConfig = () => ({
|
4
4
|
resourceQuery: /raw/,
|
5
5
|
type: "asset/source"
|
6
|
-
}
|
6
|
+
})
|
7
7
|
|
8
|
-
const webpackRawConfig = {
|
8
|
+
const webpackRawConfig = () => ({
|
9
9
|
test: /\.html$/,
|
10
10
|
exclude: /\.(js|mjs|jsx|ts|tsx)$/,
|
11
11
|
type: "asset/source"
|
12
|
-
}
|
12
|
+
})
|
13
13
|
|
14
14
|
module.exports =
|
15
|
-
config.
|
15
|
+
config.assets_bundler === "rspack" ? rspackRawConfig() : webpackRawConfig()
|
data/package/rules/rspack.js
CHANGED
@@ -1,10 +1,14 @@
|
|
1
1
|
/* eslint global-require: 0 */
|
2
2
|
|
3
3
|
const { moduleExists } = require("../utils/helpers")
|
4
|
+
const { debug, info, warn } = require("../utils/debug")
|
5
|
+
|
6
|
+
debug("Loading Rspack rules configuration...")
|
4
7
|
|
5
8
|
const rules = []
|
6
9
|
|
7
10
|
// Use Rspack's built-in SWC loader for JavaScript files
|
11
|
+
debug("Adding JavaScript rule with builtin:swc-loader")
|
8
12
|
rules.push({
|
9
13
|
test: /\.(js|jsx|mjs)$/,
|
10
14
|
exclude: /node_modules/,
|
@@ -30,6 +34,7 @@ rules.push({
|
|
30
34
|
})
|
31
35
|
|
32
36
|
// Use Rspack's built-in SWC loader for TypeScript files
|
37
|
+
debug("Adding TypeScript rule with builtin:swc-loader")
|
33
38
|
rules.push({
|
34
39
|
test: /\.(ts|tsx)$/,
|
35
40
|
exclude: /node_modules/,
|
@@ -55,42 +60,103 @@ rules.push({
|
|
55
60
|
})
|
56
61
|
|
57
62
|
// CSS rules using Rspack's built-in CSS handling
|
63
|
+
debug("Checking for CSS loader...")
|
58
64
|
if (moduleExists("css-loader")) {
|
65
|
+
debug("css-loader found, loading CSS rule configuration...")
|
59
66
|
const css = require("./css")
|
60
|
-
|
67
|
+
if (css) {
|
68
|
+
debug("Successfully added CSS rule")
|
69
|
+
rules.push(css)
|
70
|
+
} else {
|
71
|
+
warn("css-loader found but rule configuration returned null")
|
72
|
+
}
|
73
|
+
} else {
|
74
|
+
info("Skipping CSS support - css-loader not installed")
|
61
75
|
}
|
62
76
|
|
63
77
|
// Sass rules
|
78
|
+
debug("Checking for Sass loader...")
|
64
79
|
if (moduleExists("sass") && moduleExists("sass-loader")) {
|
80
|
+
debug("sass and sass-loader found, loading Sass rule configuration...")
|
65
81
|
const sass = require("./sass")
|
66
|
-
|
82
|
+
if (sass) {
|
83
|
+
debug("Successfully added Sass rule")
|
84
|
+
rules.push(sass)
|
85
|
+
} else {
|
86
|
+
warn("sass and sass-loader found but rule configuration returned null")
|
87
|
+
}
|
88
|
+
} else if (!moduleExists("sass")) {
|
89
|
+
info("Skipping Sass support - sass not installed")
|
90
|
+
} else if (!moduleExists("sass-loader")) {
|
91
|
+
info("Skipping Sass support - sass-loader not installed")
|
67
92
|
}
|
68
93
|
|
69
94
|
// Less rules
|
95
|
+
debug("Checking for Less loader...")
|
70
96
|
if (moduleExists("less") && moduleExists("less-loader")) {
|
97
|
+
debug("less and less-loader found, loading Less rule configuration...")
|
71
98
|
const less = require("./less")
|
72
|
-
|
99
|
+
if (less) {
|
100
|
+
debug("Successfully added Less rule")
|
101
|
+
rules.push(less)
|
102
|
+
} else {
|
103
|
+
warn("less and less-loader found but rule configuration returned null")
|
104
|
+
}
|
105
|
+
} else if (!moduleExists("less")) {
|
106
|
+
info("Skipping Less support - less not installed")
|
107
|
+
} else if (!moduleExists("less-loader")) {
|
108
|
+
info("Skipping Less support - less-loader not installed")
|
73
109
|
}
|
74
110
|
|
75
111
|
// Stylus rules
|
112
|
+
debug("Checking for Stylus loader...")
|
76
113
|
if (moduleExists("stylus") && moduleExists("stylus-loader")) {
|
114
|
+
debug("stylus and stylus-loader found, loading Stylus rule configuration...")
|
77
115
|
const stylus = require("./stylus")
|
78
|
-
|
116
|
+
if (stylus) {
|
117
|
+
debug("Successfully added Stylus rule")
|
118
|
+
rules.push(stylus)
|
119
|
+
} else {
|
120
|
+
warn("stylus and stylus-loader found but rule configuration returned null")
|
121
|
+
}
|
122
|
+
} else if (!moduleExists("stylus")) {
|
123
|
+
info("Skipping Stylus support - stylus not installed")
|
124
|
+
} else if (!moduleExists("stylus-loader")) {
|
125
|
+
info("Skipping Stylus support - stylus-loader not installed")
|
79
126
|
}
|
80
127
|
|
81
128
|
// ERB template support
|
129
|
+
debug("Checking for ERB template support...")
|
82
130
|
const erb = require("./erb")
|
83
131
|
|
84
|
-
|
132
|
+
if (erb) {
|
133
|
+
debug("Successfully added ERB rule")
|
134
|
+
rules.push(erb)
|
135
|
+
} else {
|
136
|
+
info("Skipping ERB support - rails-erb-loader not installed")
|
137
|
+
}
|
85
138
|
|
86
139
|
// File/asset handling using Rspack's built-in asset modules
|
140
|
+
debug("Adding file/asset handling rule...")
|
87
141
|
const file = require("./file")
|
88
142
|
|
89
|
-
|
143
|
+
if (file) {
|
144
|
+
debug("Successfully added file/asset rule")
|
145
|
+
rules.push(file)
|
146
|
+
} else {
|
147
|
+
warn("file rule configuration returned null")
|
148
|
+
}
|
90
149
|
|
91
150
|
// Raw file loading
|
151
|
+
debug("Adding raw file loading rule...")
|
92
152
|
const raw = require("./raw")
|
93
153
|
|
94
|
-
|
154
|
+
if (raw) {
|
155
|
+
debug("Successfully added raw file rule")
|
156
|
+
rules.push(raw)
|
157
|
+
} else {
|
158
|
+
warn("raw rule configuration returned null")
|
159
|
+
}
|
95
160
|
|
161
|
+
debug(`Rspack rules configuration complete. Total rules: ${rules.length}`)
|
96
162
|
module.exports = rules
|
data/package/rules/swc.js
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
const { loaderMatches } = require("../utils/helpers")
|
2
2
|
const { getSwcLoaderConfig } = require("../swc")
|
3
|
-
const {
|
3
|
+
const { javascript_transpiler: javascriptTranspiler } = require("../config")
|
4
4
|
const jscommon = require("./jscommon")
|
5
5
|
|
6
|
-
module.exports = loaderMatches(
|
6
|
+
module.exports = loaderMatches(javascriptTranspiler, "swc", () => ({
|
7
7
|
test: /\.(ts|tsx|js|jsx|mjs|coffee)?(\.erb)?$/,
|
8
8
|
...jscommon,
|
9
9
|
use: ({ resource }) => getSwcLoaderConfig(resource)
|
@@ -0,0 +1,49 @@
|
|
1
|
+
/**
|
2
|
+
* Debug utility for Shakapacker
|
3
|
+
* Provides conditional logging based on environment variables
|
4
|
+
*/
|
5
|
+
|
6
|
+
const isDebugMode = () => {
|
7
|
+
// Explicitly check for debug mode being disabled
|
8
|
+
if (process.env.SHAKAPACKER_DEBUG === "false") {
|
9
|
+
return false
|
10
|
+
}
|
11
|
+
|
12
|
+
// Support both SHAKAPACKER_DEBUG (new) and DEBUG_SHAKAPACKER (legacy) for backwards compatibility
|
13
|
+
return (
|
14
|
+
process.env.SHAKAPACKER_DEBUG === "true" ||
|
15
|
+
process.env.DEBUG_SHAKAPACKER === "true"
|
16
|
+
)
|
17
|
+
}
|
18
|
+
|
19
|
+
const debug = (message, ...args) => {
|
20
|
+
if (isDebugMode()) {
|
21
|
+
// eslint-disable-next-line no-console
|
22
|
+
console.log(`[Shakapacker] ${message}`, ...args)
|
23
|
+
}
|
24
|
+
}
|
25
|
+
|
26
|
+
const warn = (message, ...args) => {
|
27
|
+
// eslint-disable-next-line no-console
|
28
|
+
console.warn(`[Shakapacker] WARNING: ${message}`, ...args)
|
29
|
+
}
|
30
|
+
|
31
|
+
const error = (message, ...args) => {
|
32
|
+
// eslint-disable-next-line no-console
|
33
|
+
console.error(`[Shakapacker] ERROR: ${message}`, ...args)
|
34
|
+
}
|
35
|
+
|
36
|
+
const info = (message, ...args) => {
|
37
|
+
if (isDebugMode()) {
|
38
|
+
// eslint-disable-next-line no-console
|
39
|
+
console.info(`[Shakapacker] INFO: ${message}`, ...args)
|
40
|
+
}
|
41
|
+
}
|
42
|
+
|
43
|
+
module.exports = {
|
44
|
+
debug,
|
45
|
+
warn,
|
46
|
+
error,
|
47
|
+
info,
|
48
|
+
isDebugMode
|
49
|
+
}
|
@@ -15,7 +15,7 @@ const getStyleRule = (test, preprocessors = []) => {
|
|
15
15
|
// style-loader is required when using css modules with HMR on the webpack-dev-server
|
16
16
|
|
17
17
|
const extractionPlugin =
|
18
|
-
config.
|
18
|
+
config.assets_bundler === "rspack"
|
19
19
|
? requireOrError("@rspack/core").CssExtractRspackPlugin.loader
|
20
20
|
: requireOrError("mini-css-extract-plugin").loader
|
21
21
|
|
@@ -40,8 +40,8 @@ const getStyleRule = (test, preprocessors = []) => {
|
|
40
40
|
use
|
41
41
|
}
|
42
42
|
|
43
|
-
if (config.
|
44
|
-
result.type = "javascript/auto"
|
43
|
+
if (config.assets_bundler === "rspack") {
|
44
|
+
result.type = "javascript/auto"
|
45
45
|
}
|
46
46
|
|
47
47
|
return result
|
@@ -7,7 +7,7 @@ const requireOrError = (moduleName) => {
|
|
7
7
|
return require(moduleName)
|
8
8
|
} catch (error) {
|
9
9
|
throw new Error(
|
10
|
-
`[SHAKAPACKER]: ${moduleName} is required for ${config.
|
10
|
+
`[SHAKAPACKER]: ${moduleName} is required for ${config.assets_bundler} but is not installed. View Shakapacker's documented dependencies at https://github.com/shakacode/shakapacker/tree/main/docs/peer-dependencies.md`
|
11
11
|
)
|
12
12
|
}
|
13
13
|
}
|
@@ -0,0 +1,61 @@
|
|
1
|
+
/**
|
2
|
+
* Validates that required dependencies are installed for the selected bundler
|
3
|
+
*/
|
4
|
+
|
5
|
+
const { moduleExists } = require("./helpers")
|
6
|
+
const { error } = require("./debug")
|
7
|
+
|
8
|
+
const validateRspackDependencies = () => {
|
9
|
+
const requiredDependencies = ["@rspack/core", "rspack-manifest-plugin"]
|
10
|
+
|
11
|
+
const missingDependencies = requiredDependencies.filter(
|
12
|
+
(dep) => !moduleExists(dep)
|
13
|
+
)
|
14
|
+
|
15
|
+
if (missingDependencies.length > 0) {
|
16
|
+
error(
|
17
|
+
`Missing required dependencies for RSpack:\n${missingDependencies
|
18
|
+
.map((dep) => ` - ${dep}`)
|
19
|
+
.join(
|
20
|
+
"\n"
|
21
|
+
)}\n\nPlease install them with:\n npm install ${missingDependencies.join(
|
22
|
+
" "
|
23
|
+
)}`
|
24
|
+
)
|
25
|
+
throw new Error(
|
26
|
+
`Missing RSpack dependencies: ${missingDependencies.join(", ")}`
|
27
|
+
)
|
28
|
+
}
|
29
|
+
}
|
30
|
+
|
31
|
+
const validateWebpackDependencies = () => {
|
32
|
+
const requiredDependencies = [
|
33
|
+
"webpack",
|
34
|
+
"webpack-cli",
|
35
|
+
"webpack-assets-manifest"
|
36
|
+
]
|
37
|
+
|
38
|
+
const missingDependencies = requiredDependencies.filter(
|
39
|
+
(dep) => !moduleExists(dep)
|
40
|
+
)
|
41
|
+
|
42
|
+
if (missingDependencies.length > 0) {
|
43
|
+
error(
|
44
|
+
`Missing required dependencies for Webpack:\n${missingDependencies
|
45
|
+
.map((dep) => ` - ${dep}`)
|
46
|
+
.join(
|
47
|
+
"\n"
|
48
|
+
)}\n\nPlease install them with:\n npm install ${missingDependencies.join(
|
49
|
+
" "
|
50
|
+
)}`
|
51
|
+
)
|
52
|
+
throw new Error(
|
53
|
+
`Missing Webpack dependencies: ${missingDependencies.join(", ")}`
|
54
|
+
)
|
55
|
+
}
|
56
|
+
}
|
57
|
+
|
58
|
+
module.exports = {
|
59
|
+
validateRspackDependencies,
|
60
|
+
validateWebpackDependencies
|
61
|
+
}
|
@@ -39,6 +39,7 @@ function createDevServerConfig() {
|
|
39
39
|
devMiddleware: {
|
40
40
|
publicPath
|
41
41
|
},
|
42
|
+
hot: devServerYamlConfig.hmr,
|
42
43
|
liveReload,
|
43
44
|
historyApiFallback: {
|
44
45
|
disableDotRule: true
|
@@ -47,6 +48,7 @@ function createDevServerConfig() {
|
|
47
48
|
publicPath: contentBase
|
48
49
|
}
|
49
50
|
}
|
51
|
+
delete devServerYamlConfig.hmr
|
50
52
|
|
51
53
|
if (devServerYamlConfig.static) {
|
52
54
|
config.static = { ...config.static, ...devServerYamlConfig.static }
|
data/package.json
CHANGED
@@ -11,7 +11,7 @@ jest.mock("../../../package/config", () => {
|
|
11
11
|
const original = jest.requireActual("../../../package/config")
|
12
12
|
return {
|
13
13
|
...original,
|
14
|
-
|
14
|
+
javascript_transpiler: "esbuild",
|
15
15
|
additional_paths: [...original.additional_paths, "node_modules/included"]
|
16
16
|
}
|
17
17
|
})
|
@@ -11,7 +11,7 @@ jest.mock("../../../package/config", () => {
|
|
11
11
|
const original = jest.requireActual("../../../package/config")
|
12
12
|
return {
|
13
13
|
...original,
|
14
|
-
|
14
|
+
javascript_transpiler: "swc",
|
15
15
|
additional_paths: [...original.additional_paths, "node_modules/included"]
|
16
16
|
}
|
17
17
|
})
|
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.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Heinemeier Hansson
|
@@ -138,6 +138,8 @@ files:
|
|
138
138
|
- ".github/ISSUE_TEMPLATE/feature_request.md"
|
139
139
|
- ".github/PULL_REQUEST_TEMPLATE.md"
|
140
140
|
- ".github/STATUS.md"
|
141
|
+
- ".github/workflows/claude-code-review.yml"
|
142
|
+
- ".github/workflows/claude.yml"
|
141
143
|
- ".github/workflows/dummy.yml"
|
142
144
|
- ".github/workflows/generator.yml"
|
143
145
|
- ".github/workflows/node.yml"
|
@@ -165,6 +167,7 @@ files:
|
|
165
167
|
- docs/peer-dependencies.md
|
166
168
|
- docs/react.md
|
167
169
|
- docs/rspack.md
|
170
|
+
- docs/rspack_migration_guide.md
|
168
171
|
- docs/sprockets.md
|
169
172
|
- docs/style_loader_vs_mini_css.md
|
170
173
|
- docs/subresource_integrity.md
|
@@ -185,7 +188,6 @@ files:
|
|
185
188
|
- lib/install/application.js
|
186
189
|
- lib/install/bin/shakapacker
|
187
190
|
- lib/install/bin/shakapacker-dev-server
|
188
|
-
- lib/install/bin/shakapacker-rspack
|
189
191
|
- lib/install/binstubs.rb
|
190
192
|
- lib/install/config/rspack/rspack.config.js
|
191
193
|
- lib/install/config/shakapacker.yml
|
@@ -245,6 +247,7 @@ files:
|
|
245
247
|
- package/optimization/webpack.js
|
246
248
|
- package/plugins/rspack.js
|
247
249
|
- package/plugins/webpack.js
|
250
|
+
- package/rspack/index.js
|
248
251
|
- package/rules/babel.js
|
249
252
|
- package/rules/coffee.js
|
250
253
|
- package/rules/css.js
|
@@ -261,12 +264,14 @@ files:
|
|
261
264
|
- package/rules/webpack.js
|
262
265
|
- package/swc/index.js
|
263
266
|
- package/utils/configPath.js
|
267
|
+
- package/utils/debug.js
|
264
268
|
- package/utils/defaultConfigPath.js
|
265
269
|
- package/utils/getStyleRule.js
|
266
270
|
- package/utils/helpers.js
|
267
271
|
- package/utils/inliningCss.js
|
268
272
|
- package/utils/requireOrError.js
|
269
273
|
- package/utils/snakeToCamelCase.js
|
274
|
+
- package/utils/validateDependencies.js
|
270
275
|
- package/webpackDevServerConfig.js
|
271
276
|
- prettier.config.js
|
272
277
|
- shakapacker.gemspec
|
@@ -297,7 +302,7 @@ homepage: https://github.com/shakacode/shakapacker
|
|
297
302
|
licenses:
|
298
303
|
- MIT
|
299
304
|
metadata:
|
300
|
-
source_code_uri: https://github.com/shakacode/shakapacker/tree/v9.0.0.beta.
|
305
|
+
source_code_uri: https://github.com/shakacode/shakapacker/tree/v9.0.0.beta.2
|
301
306
|
rdoc_options: []
|
302
307
|
require_paths:
|
303
308
|
- lib
|
@@ -1,13 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
ENV["RAILS_ENV"] ||= "development"
|
4
|
-
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile", __FILE__)
|
5
|
-
|
6
|
-
require "bundler/setup"
|
7
|
-
require "shakapacker"
|
8
|
-
require "shakapacker/rspack_runner"
|
9
|
-
|
10
|
-
APP_ROOT = File.expand_path("..", __dir__)
|
11
|
-
Dir.chdir(APP_ROOT) do
|
12
|
-
Shakapacker::RspackRunner.run(ARGV)
|
13
|
-
end
|