vue_cli-rails 0.1.6 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.gitignore +1 -0
- data/.rubocop.yml +3 -15
- data/.travis.yml +0 -13
- data/Gemfile.lock +3 -3
- data/README.md +3 -3
- data/Rakefile +1 -1
- data/lib/helpers/lib/input_loop.rb +1 -1
- data/lib/helpers/scripts/install_rails.rb +8 -11
- data/lib/helpers/scripts/vue_command.rb +7 -7
- data/lib/helpers/scripts/vue_create.rb +101 -26
- data/lib/source/vue.config.js +20 -19
- data/lib/source/vue.rails.js +16 -1
- data/lib/tasks/vue.rake +1 -1
- data/lib/vue_cli/rails/configuration.rb +9 -2
- data/lib/vue_cli/rails/engine.rb +5 -5
- data/lib/vue_cli/rails/node_env.rb +9 -9
- data/lib/vue_cli/rails/version.rb +1 -1
- data/vue_cli-rails.gemspec +9 -9
- metadata +3 -6
- data/bin/console +0 -14
- data/bin/setup +0 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 0a7ee2779059b83202b6057251b245a50fc3b0e7a803c0a61e113da7aa6b10d1
|
4
|
+
data.tar.gz: 8bde5723e1263ec2f0a0063e78c8f7467effe82a661dd6910fc020275b3776fb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6b244978b9ca71bd0fff983c1f45db81ed07aee91664830fa53a65ba8e85b98d18479736ad4208979d52e67bff54fcdf389a333e09143e312c7f4684c4076a5b
|
7
|
+
data.tar.gz: 30adca9ac7ec73732568e9865666c1035298828893cdecf8c4f92fd14e71d8993ad7638385c428eefc043645e43c37a6543a07da4aaa1b59f0c1349346388298
|
data/.gitignore
CHANGED
data/.rubocop.yml
CHANGED
@@ -1,20 +1,8 @@
|
|
1
|
+
inherit_from:
|
2
|
+
- http://shopify.github.io/ruby-style-guide/rubocop.yml
|
3
|
+
|
1
4
|
AllCops:
|
2
5
|
TargetRubyVersion: 2.3
|
3
6
|
|
4
|
-
Metrics/LineLength:
|
5
|
-
Max: 99
|
6
|
-
|
7
7
|
Style/FrozenStringLiteralComment:
|
8
8
|
Enabled: false
|
9
|
-
|
10
|
-
Style/TrailingCommaInArguments:
|
11
|
-
EnforcedStyleForMultiline: comma
|
12
|
-
|
13
|
-
Style/TrailingCommaInArrayLiteral:
|
14
|
-
EnforcedStyleForMultiline: comma
|
15
|
-
|
16
|
-
Style/TrailingCommaInHashLiteral:
|
17
|
-
EnforcedStyleForMultiline: comma
|
18
|
-
|
19
|
-
Style/Documentation:
|
20
|
-
Enabled: false
|
data/.travis.yml
CHANGED
@@ -3,18 +3,5 @@ sudo: false
|
|
3
3
|
language: ruby
|
4
4
|
cache: bundler
|
5
5
|
rvm:
|
6
|
-
- 2.3.8
|
7
6
|
- 2.4.5
|
8
|
-
- 2.5.2
|
9
|
-
- 2.6.1
|
10
|
-
env:
|
11
|
-
- RAILS_VERSION=4 NODE_VERSION=8
|
12
|
-
- RAILS_VERSION=4 NODE_VERSION=lts
|
13
|
-
- RAILS_VERSION=5 NODE_VERSION=lts
|
14
|
-
- RAILS_VERSION=5 NODE_VERSION=latest
|
15
|
-
matrix:
|
16
|
-
fast_finish: true
|
17
|
-
include:
|
18
|
-
- rvm: ruby-head
|
19
|
-
env: RAILS_VERSION=beta NODE_VERSION=latest
|
20
7
|
before_install: gem install bundler -v 1.17.3
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
vue_cli-rails (0.
|
4
|
+
vue_cli-rails (0.2.0)
|
5
5
|
activesupport (>= 4.2)
|
6
6
|
rack-proxy (>= 0.6)
|
7
7
|
railties (>= 4.2)
|
@@ -34,7 +34,7 @@ GEM
|
|
34
34
|
crass (1.0.4)
|
35
35
|
diff-lcs (1.3)
|
36
36
|
erubi (1.8.0)
|
37
|
-
i18n (1.
|
37
|
+
i18n (1.6.0)
|
38
38
|
concurrent-ruby (~> 1.0)
|
39
39
|
loofah (2.2.3)
|
40
40
|
crass (~> 1.0.2)
|
@@ -96,4 +96,4 @@ DEPENDENCIES
|
|
96
96
|
vue_cli-rails!
|
97
97
|
|
98
98
|
BUNDLED WITH
|
99
|
-
1.17.
|
99
|
+
1.17.2
|
data/README.md
CHANGED
@@ -58,11 +58,11 @@ Please ONLY puts your entry-point files under `app/assets/vue/views` folder with
|
|
58
58
|
|
59
59
|
> Be aware, `.js.erb` and `.vue.erb` are NOT supported. I will explain the reason in [Q&A section](#difference-from-webpacker).
|
60
60
|
|
61
|
-
If you are new to modern front-end development, or more specifically with `webpack` in this case, please read [Q&A section](#
|
61
|
+
If you are new to modern front-end development, or more specifically with `webpack` in this case, please read [Q&A section](#qa) for more information.
|
62
62
|
|
63
63
|
#### Helper `vue_entry`
|
64
64
|
|
65
|
-
`vue_entry` is like `javascript_include_tag` and `stylesheet_link_tag` which generates relative assets links for your entry point. (It's like a combination of `stylesheet_pack_tag` and `javascript_packs_with_chunks_tag` in Webpacker 4. I will explain why it's different in [Q&A](#
|
65
|
+
`vue_entry` is like `javascript_include_tag` and `stylesheet_link_tag` which generates relative assets links for your entry point. (It's like a combination of `stylesheet_pack_tag` and `javascript_packs_with_chunks_tag` in Webpacker 4. I will explain why it's different in [Q&A](#qa).)
|
66
66
|
|
67
67
|
> You may have interest of path alias in `config/vue.yml`.
|
68
68
|
|
@@ -204,7 +204,7 @@ Actually `public_output_path` in `config/vue.yml` is very simple - just a sub pa
|
|
204
204
|
|
205
205
|
- `package_manager`
|
206
206
|
|
207
|
-
Pretty straightforward, which package manager will be used. Valid value: `npm` or `yarn`. It does NOT support `pnpm` or other package managers. You can find the reason in [Q&A](#
|
207
|
+
Pretty straightforward, which package manager will be used. Valid value: `npm` or `yarn`. It does NOT support `pnpm` or other package managers. You can find the reason in [Q&A](#qa).
|
208
208
|
|
209
209
|
- `public_output_path`
|
210
210
|
|
data/Rakefile
CHANGED
@@ -4,8 +4,8 @@ require_relative 'common'
|
|
4
4
|
ver = ENV['RAILS_VERSION']
|
5
5
|
abort('RAILS_VERSION not found!') if ver.blank?
|
6
6
|
|
7
|
-
versions = `gem list -r -a -e rails`.scan(/\b((\d+\.)+\d+)\b/).map { |m| m[0] }
|
8
|
-
ver = versions.find { |v| v.start_with?
|
7
|
+
versions = %x`gem list -r -a -e rails`.scan(/\b((\d+\.)+\d+)\b/).map { |m| m[0] }
|
8
|
+
ver = versions.find { |v| v.start_with?(ver) }
|
9
9
|
abort("Version #{ver} not found!") if ver.blank?
|
10
10
|
|
11
11
|
run("gem install rails -v #{ver}")
|
@@ -26,9 +26,7 @@ RAILS_NEW_SCRIPT = {
|
|
26
26
|
skip-bundle
|
27
27
|
],
|
28
28
|
keep_gems: /^\s*gem\s+['"](rails|puma|bootsnap)/,
|
29
|
-
append:
|
30
|
-
gem 'sqlite3', '~> 1.3.10'
|
31
|
-
RUBY
|
29
|
+
append: "gem 'sqlite3', '~> 1.3.10'",
|
32
30
|
},
|
33
31
|
}
|
34
32
|
|
@@ -36,13 +34,12 @@ require 'pathname'
|
|
36
34
|
require 'fileutils'
|
37
35
|
|
38
36
|
scirpt = RAILS_NEW_SCRIPT[ver[0]]
|
39
|
-
run
|
40
|
-
FileUtils.chdir
|
37
|
+
run("rails new test_vcr #{scirpt[:args].map { |a| "--#{a}" }.join(' ')}")
|
38
|
+
FileUtils.chdir('test_vcr')
|
41
39
|
|
42
40
|
root = Pathname.new(FileUtils.pwd)
|
43
41
|
gemfile = root.join('Gemfile').read.split("\n")
|
44
|
-
|
45
|
-
|
42
|
+
.reject(&:empty?).reject { |s| s =~ /^\s*#/ }
|
43
|
+
.reject { |s| s =~ /^\s*gem/ && s !~ scirpt[:keep_gems] }
|
46
44
|
root.join('Gemfile').write("#{(gemfile + [scirpt[:append]]).join("\n")}\n")
|
47
|
-
run
|
48
|
-
# rails new test_vcr --database=sqlite3 --skip-yarn --skip-git --skip-sprockets --skip-spring --skip-listen --skip-turbolinks --skip-javascript --skip-test --skip-bundle
|
45
|
+
run('bundle install')
|
@@ -23,7 +23,7 @@ class VueCommand
|
|
23
23
|
end
|
24
24
|
|
25
25
|
STDERR.puts "Unsupported formats #{unknown}" if unknown.any?
|
26
|
-
@pm.add
|
26
|
+
@pm.add("-D #{pkgs.join(' ')}")
|
27
27
|
end
|
28
28
|
|
29
29
|
def install_node_dev
|
@@ -32,10 +32,10 @@ class VueCommand
|
|
32
32
|
|
33
33
|
add_deps(pack_json, %w[cross-env npm-run-all])
|
34
34
|
add_scripts(pack_json,
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
35
|
+
dev: 'run-p rails-s serve',
|
36
|
+
prod: 'cross-env RAILS_ENV=production vue-cli-service build',
|
37
|
+
serve: 'vue-cli-service serve',
|
38
|
+
'rails-s' => 'cross-env NO_WEBPACK_DEV_SERVER=1 rails s')
|
39
39
|
puts 'Dependencies and scripts have been installed successfully'
|
40
40
|
cmd = @pm.package_manager == :npm ? 'npm run' : 'yarn'
|
41
41
|
puts " Please use `#{cmd} dev` to start dev server"
|
@@ -49,14 +49,14 @@ class VueCommand
|
|
49
49
|
pkgs = [packages].flatten.find_all do |dep|
|
50
50
|
!(dep.blank? || deps.key?(dep))
|
51
51
|
end
|
52
|
-
@pm.add
|
52
|
+
@pm.add("#{dev ? '-D ' : ''}#{pkgs.join(' ')}") if pkgs.any?
|
53
53
|
end
|
54
54
|
|
55
55
|
def add_scripts(package_json, commands = {})
|
56
56
|
json = JSON.parse(package_json.read)
|
57
57
|
scripts = json['scripts']
|
58
58
|
commands.stringify_keys.each do |key, cmd|
|
59
|
-
scripts[key] = cmd unless scripts.key?
|
59
|
+
scripts[key] = cmd unless scripts.key?(key)
|
60
60
|
end
|
61
61
|
package_json.write(JSON.pretty_generate(json))
|
62
62
|
end
|
@@ -15,19 +15,22 @@ class VueCreate
|
|
15
15
|
|
16
16
|
def start
|
17
17
|
check_node!
|
18
|
-
FileUtils.chdir
|
18
|
+
FileUtils.chdir(@root)
|
19
|
+
@pending_install = false
|
19
20
|
begin
|
20
21
|
package_manager?
|
21
22
|
install_vue_cli
|
22
23
|
run_vue_create?
|
23
24
|
install_dev_deps
|
24
|
-
|
25
|
+
@pm.install if @pending_install
|
26
|
+
delete_vue_sample?
|
25
27
|
copy_demo?
|
26
28
|
copy_config
|
27
29
|
generate_vue_yml
|
30
|
+
fix_jest_config!
|
28
31
|
puts 'vue:create finished!'
|
29
32
|
ensure
|
30
|
-
FileUtils.chdir
|
33
|
+
FileUtils.chdir(@pwd)
|
31
34
|
end
|
32
35
|
end
|
33
36
|
|
@@ -43,14 +46,14 @@ class VueCreate
|
|
43
46
|
npm = @pm.npm_version
|
44
47
|
abort('Cannot find npm or yarn') unless yarn || npm
|
45
48
|
|
46
|
-
if yarn && npm
|
47
|
-
|
49
|
+
input = if yarn && npm
|
50
|
+
@input.gets(
|
48
51
|
'Which package manager to use?',
|
49
52
|
@root.join('package-lock.json').exist? ? 'yN' : 'Yn',
|
50
53
|
y: 'yarn', n: 'npm',
|
51
54
|
)
|
52
55
|
else
|
53
|
-
|
56
|
+
npm ? 'n' : 'y'
|
54
57
|
end
|
55
58
|
@pm.use!(input == 'n' ? :npm : :yarn)
|
56
59
|
puts "Using package manager: #{@pm.package_manager}"
|
@@ -64,27 +67,73 @@ class VueCreate
|
|
64
67
|
end
|
65
68
|
|
66
69
|
def run_vue_create?
|
67
|
-
|
70
|
+
pack_input = 'y'
|
68
71
|
if @pack.exist?
|
69
72
|
puts 'Detected `package.json`!'
|
70
|
-
|
73
|
+
pack_input = @input.gets(
|
71
74
|
' Do you want `vue create?` to overwrite your package.json',
|
72
|
-
'
|
73
|
-
a: 'Auto', k: 'Keep',
|
75
|
+
'yAks',
|
76
|
+
a: 'Auto', k: 'Keep', s: 'Skip vue create',
|
77
|
+
)
|
78
|
+
end
|
79
|
+
return if pack_input == 's'
|
80
|
+
|
81
|
+
gi_input = 'y'
|
82
|
+
gi = @root.join('.gitignore')
|
83
|
+
if gi.exist?
|
84
|
+
puts 'Detected `.gitignore`!'
|
85
|
+
gi_input = @input.gets(
|
86
|
+
' Do you want `vue create?` to overwrite your .gitignore',
|
87
|
+
'yMk',
|
88
|
+
m: 'Merge', k: 'Keep',
|
74
89
|
)
|
75
90
|
end
|
76
|
-
return if input == 'n'
|
77
91
|
|
78
|
-
|
79
|
-
@
|
92
|
+
# backups
|
93
|
+
vue_config = @root.join('vue.config.js')
|
94
|
+
backup_vue_config = vue_config.exist?
|
95
|
+
src_json = JSON.parse(@pack.read) if pack_input != 'y'
|
96
|
+
gi_lines = gi.read.split("\n") if gi_input != 'y'
|
97
|
+
if backup_vue_config
|
98
|
+
FileUtils.mv(vue_config, "#{vue_config}.backup")
|
99
|
+
# will be recreated
|
100
|
+
FileUtils.rm_f(@root.join('vue.rails.js'))
|
101
|
+
end
|
102
|
+
pub_dir = @root.join('public')
|
103
|
+
FileUtils.mv(pub_dir, "#{pub_dir}.backup")
|
80
104
|
|
81
|
-
|
82
|
-
|
105
|
+
begin
|
106
|
+
@pm.exec('vue create', '', "-n -m #{@pm.package_manager} .")
|
107
|
+
ensure
|
108
|
+
# restore backups
|
109
|
+
FileUtils.rm_rf(pub_dir) if pub_dir.exist?
|
110
|
+
FileUtils.mv("#{pub_dir}.backup", pub_dir)
|
111
|
+
FileUtils.mv("#{vue_config}.backup", vue_config) if backup_vue_config
|
112
|
+
end
|
83
113
|
|
84
|
-
|
114
|
+
# merge gitignore
|
115
|
+
if gi_input == 'm'
|
116
|
+
old_gi_line_count = gi_lines.size
|
117
|
+
old_gi = Set.new(gi_lines.map(&:strip))
|
118
|
+
|
119
|
+
gi.read.split("\n").map(&:strip).find_all(&:present?).each do |ln|
|
120
|
+
gi_lines << ln unless old_gi.include?(ln)
|
121
|
+
end
|
122
|
+
gi.write(gi_lines.map { |ln| "#{ln}\n" }.join('')) if gi_lines.size > old_gi_line_count
|
123
|
+
elsif gi_input == 'k'
|
124
|
+
gi.write(gi_lines.join(''))
|
125
|
+
end
|
126
|
+
|
127
|
+
# check packages.json
|
128
|
+
return if pack_input == 'y'
|
129
|
+
dst_json = JSON.parse(@pack.read)
|
130
|
+
return if dst_json == src_json
|
131
|
+
|
132
|
+
# merge packages.json
|
133
|
+
src_json, dst_json = [dst_json, src_json] if pack_input == 'a'
|
85
134
|
dst_json.deep_merge!(src_json)
|
86
135
|
@pack.write(JSON.pretty_generate(dst_json))
|
87
|
-
@
|
136
|
+
@pending_install = true
|
88
137
|
end
|
89
138
|
|
90
139
|
def install_dev_deps
|
@@ -93,15 +142,20 @@ class VueCreate
|
|
93
142
|
dd = %w[webpack-assets-manifest js-yaml].find_all do |dep|
|
94
143
|
!dev_deps.key?(dep)
|
95
144
|
end
|
96
|
-
|
145
|
+
if dd.any?
|
146
|
+
@pm.add("-D #{dd.join(' ')}")
|
147
|
+
@pending_install = false
|
148
|
+
end
|
97
149
|
end
|
98
150
|
|
99
|
-
def
|
100
|
-
src
|
101
|
-
|
151
|
+
def delete_vue_sample?
|
152
|
+
%w[src dist].each do |fn|
|
153
|
+
file = @root.join(fn)
|
154
|
+
next unless file.exist?
|
102
155
|
|
103
|
-
|
104
|
-
|
156
|
+
puts "Detected `#{fn}` (should be generated by vue-cli)"
|
157
|
+
FileUtils.rm_rf(file.to_s) if @input.gets(" Do you want to delete #{file}?") == 'y'
|
158
|
+
end
|
105
159
|
end
|
106
160
|
|
107
161
|
def copy_demo?
|
@@ -115,8 +169,8 @@ class VueCreate
|
|
115
169
|
foo = false
|
116
170
|
bar = false
|
117
171
|
route_lines.each do |line|
|
118
|
-
foo ||= line.include?
|
119
|
-
bar ||= line.include?
|
172
|
+
foo ||= line.include?('vue#foo')
|
173
|
+
bar ||= line.include?('vue#bar')
|
120
174
|
end
|
121
175
|
return if foo && bar
|
122
176
|
|
@@ -147,7 +201,28 @@ class VueCreate
|
|
147
201
|
end
|
148
202
|
|
149
203
|
yml = @src_dir.join('vue.yml').read
|
150
|
-
yml = yml.sub('${PACKAGE_MANAGER}', pm.package_manager.to_s)
|
204
|
+
yml = yml.sub('${PACKAGE_MANAGER}', @pm.package_manager.to_s)
|
151
205
|
yml_dest.write(yml)
|
152
206
|
end
|
207
|
+
|
208
|
+
def fix_jest_config!
|
209
|
+
jest_file = @root.join('jest.config.js')
|
210
|
+
return unless jest_file.exist?
|
211
|
+
|
212
|
+
jest_config = %x`node -e "console.log(JSON.stringify(require('./jest.config.js')))"`
|
213
|
+
jest_config = JSON.parse(jest_config)
|
214
|
+
jest_config.delete('moduleNameMapper')
|
215
|
+
jest = <<~JS
|
216
|
+
const { jestModuleNameMapper: moduleNameMapper } = require('./vue.rails');
|
217
|
+
|
218
|
+
module.exports = #{JSON.pretty_generate(jest_config)}_MODULE_NAME_MAPPER_;
|
219
|
+
JS
|
220
|
+
jest_file.write(jest.sub(/\n?}_MODULE_NAME_MAPPER_/, ",\n moduleNameMapper\n}"))
|
221
|
+
|
222
|
+
dev_deps = JSON.parse(@pack.read)['devDependencies']
|
223
|
+
return unless dev_deps['eslint'].present?
|
224
|
+
@pm.exec('eslint', jest_file.to_s, '--fix')
|
225
|
+
rescue => e
|
226
|
+
STDERR.puts e.message
|
227
|
+
end
|
153
228
|
end
|
data/lib/source/vue.config.js
CHANGED
@@ -55,26 +55,27 @@ module.exports = {
|
|
55
55
|
|
56
56
|
/* put your custom code here
|
57
57
|
// Example: npm/yarn add -D compression-webpack-plugin webpack-bundle-analyzer
|
58
|
-
if (isProd)
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
58
|
+
if (!isProd) return;
|
59
|
+
config
|
60
|
+
.plugin('compression')
|
61
|
+
.use(CompressionWebpackPlugin)
|
62
|
+
.init(Plugin => new Plugin({
|
63
|
+
filename: '[path].gz[query]',
|
64
|
+
algorithm: 'gzip',
|
65
|
+
test: new RegExp('\\.(js|css)$'),
|
66
|
+
threshold: 1024 * 5,
|
67
|
+
// minimum 5K
|
68
68
|
// minRatio: 0.6,
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
69
|
+
}))
|
70
|
+
.end()
|
71
|
+
.plugin('analyzer')
|
72
|
+
.use(BundleAnalyzerPlugin)
|
73
|
+
.init(Plugin => new Plugin({
|
74
|
+
reportFilename: resolve(__dirname, 'tmp/bundle-analyzer-report.html'),
|
75
|
+
analyzerMode: 'static',
|
76
|
+
// openAnalyzer: false,
|
77
|
+
}))
|
78
|
+
.end();
|
78
79
|
// */
|
79
80
|
},
|
80
81
|
};
|
data/lib/source/vue.rails.js
CHANGED
@@ -48,7 +48,12 @@ module.exports = (() => {
|
|
48
48
|
}
|
49
49
|
});
|
50
50
|
};
|
51
|
-
|
51
|
+
|
52
|
+
try {
|
53
|
+
findAllJsFiles(assetRoot);
|
54
|
+
} catch (_e) {
|
55
|
+
//
|
56
|
+
}
|
52
57
|
|
53
58
|
settings = {
|
54
59
|
env: railsEnv,
|
@@ -68,6 +73,13 @@ module.exports = (() => {
|
|
68
73
|
},
|
69
74
|
},
|
70
75
|
|
76
|
+
jestModuleNameMapper: Object.keys(alias).reduce((obj, key) => ({
|
77
|
+
...obj,
|
78
|
+
[`^${key.replace(/[-[{}()+.,^$#/\s\]]/g, '\\$&')}/(.*)$`]: `<rootDir>/${
|
79
|
+
alias[key].replace(/^\//, '').replace(/\/$/, '')
|
80
|
+
}/$1`,
|
81
|
+
}), {}),
|
82
|
+
|
71
83
|
devServer,
|
72
84
|
filenameHashing,
|
73
85
|
lintOnSave,
|
@@ -84,6 +96,7 @@ module.exports = (() => {
|
|
84
96
|
/* eslint-disable-next-line global-require,import/no-extraneous-dependencies */
|
85
97
|
const { execSync } = require('child_process');
|
86
98
|
|
99
|
+
console.error(e);
|
87
100
|
settings = JSON.parse(execSync('bundle exec rake vue:json_config', {
|
88
101
|
cwd: __dirname,
|
89
102
|
encoding: 'utf8',
|
@@ -95,6 +108,7 @@ module.exports = (() => {
|
|
95
108
|
const v = settings[k];
|
96
109
|
return v === undefined ? cfg : { ...cfg, [k]: v };
|
97
110
|
}, {});
|
111
|
+
const { jestModuleNameMapper } = settings;
|
98
112
|
|
99
113
|
return {
|
100
114
|
isProd: settings.env === 'production',
|
@@ -108,6 +122,7 @@ module.exports = (() => {
|
|
108
122
|
output: settings.manifestOutput,
|
109
123
|
},
|
110
124
|
},
|
125
|
+
jestModuleNameMapper,
|
111
126
|
getSettings: (keys = Object.keys(settings)) => getSettingsFromKeys(keys),
|
112
127
|
pickUpSettings: ([lines]) => getSettingsFromKeys(lines.split('\n').map(s => s.trim())),
|
113
128
|
};
|
data/lib/tasks/vue.rake
CHANGED
@@ -15,7 +15,7 @@ namespace :vue do
|
|
15
15
|
task :json_config, [:from] => :environment do |_t, args|
|
16
16
|
if args.from == 'js'
|
17
17
|
require_relative '../helpers/lib/cmd'
|
18
|
-
Cmd.run
|
18
|
+
Cmd.run(VueCli::Rails::Configuration::JS_CONFIG_CMD)
|
19
19
|
else
|
20
20
|
config = VueCli::Rails::Configuration.new
|
21
21
|
puts config.to_json
|
@@ -10,7 +10,7 @@ module VueCli
|
|
10
10
|
raise(Error, 'Incorrect package_manager in config/vue.yml') if @package_manager.blank?
|
11
11
|
|
12
12
|
@node_env ||= NodeEnv.new do |ne|
|
13
|
-
ne.use!
|
13
|
+
ne.use!(@package_manager)
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
@@ -58,9 +58,16 @@ module VueCli
|
|
58
58
|
pluginOptions
|
59
59
|
].each { |k| c[k] = config[k] if config.key?(k) }
|
60
60
|
|
61
|
+
jest = {}
|
62
|
+
c['jestModuleNameMapper'] = jest
|
61
63
|
resolve_config(c, 'manifestOutput')
|
62
64
|
config['alias']&.tap do |aliases|
|
63
|
-
aliases.each_key
|
65
|
+
aliases.each_key do |k|
|
66
|
+
key = k.gsub(%r<(?=[-{}()+.,^$#/\s\]])>, '\\')
|
67
|
+
path = aliases[k].sub(%r/^\//, '').sub(%r/\/$/, '')
|
68
|
+
jest["^#{key}/(.*)$"] = "<rootDir>/#{path}/$1"
|
69
|
+
resolve_config(aliases, k)
|
70
|
+
end
|
64
71
|
cw['resolve']['alias'] = aliases
|
65
72
|
end
|
66
73
|
dev_server = c['devServer'] || {}
|
data/lib/vue_cli/rails/engine.rb
CHANGED
@@ -6,15 +6,15 @@ module VueCli
|
|
6
6
|
initializer 'vue_cli' do |app|
|
7
7
|
if ::Rails.env.development? && defined?(::Rails::Server)
|
8
8
|
require 'vue_cli/rails/dev_server_proxy'
|
9
|
-
app.middleware.insert_before
|
9
|
+
app.middleware.insert_before(0, DevServerProxy)
|
10
10
|
Engine.start_wds! if ENV['NO_WEBPACK_DEV_SERVER'].blank?
|
11
11
|
end
|
12
12
|
|
13
|
-
::ActiveSupport.on_load
|
14
|
-
::ActionController::Base.helper
|
13
|
+
::ActiveSupport.on_load(:action_controller) do
|
14
|
+
::ActionController::Base.helper(Helper)
|
15
15
|
end
|
16
16
|
|
17
|
-
::ActiveSupport.on_load
|
17
|
+
::ActiveSupport.on_load(:action_view) do
|
18
18
|
include Helper
|
19
19
|
end
|
20
20
|
end
|
@@ -24,7 +24,7 @@ module VueCli
|
|
24
24
|
config = Configuration.instance
|
25
25
|
port = config['devServer']&.dig('port')
|
26
26
|
if port
|
27
|
-
running = `lsof -i:#{port} -sTCP:LISTEN -Pn`&.chop.presence&.split("\n")
|
27
|
+
running = %x`lsof -i:#{port} -sTCP:LISTEN -Pn`&.chop.presence&.split("\n")
|
28
28
|
pid = running&.dig(1)&.split(/\s+/, 3)&.dig(1)
|
29
29
|
Process.kill('INT', pid.to_i) if pid.present?
|
30
30
|
end
|
@@ -35,14 +35,14 @@ module VueCli
|
|
35
35
|
def exec(command, args = nil, extra = nil, env: {})
|
36
36
|
cmd = COMMAND_LINE[command.to_sym] || {}
|
37
37
|
cmd = if @pm == :yarn && cmd[:yarn]
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
38
|
+
cmd[:yarn]
|
39
|
+
elsif @pm == :npm && cmd[:npm]
|
40
|
+
cmd[:npm]
|
41
|
+
elsif cmd[:npx]
|
42
|
+
@pm == :yarn ? "yarn exec #{cmd[:npx]}" : "npx #{cmd[:npx]}"
|
43
|
+
else
|
44
|
+
@pm == :yarn ? "yarn exec #{command}" : "npx #{command}"
|
45
|
+
end
|
46
46
|
|
47
47
|
cmd = "#{cmd} #{args}" if args.present?
|
48
48
|
cmd = "#{cmd} #{@pm == :yarn ? '-- ' : ''}#{extra}" if extra.present?
|
@@ -75,7 +75,7 @@ module VueCli
|
|
75
75
|
return @versions[bin] if @versions.key?(bin)
|
76
76
|
|
77
77
|
r = begin
|
78
|
-
`#{bin} --version`.strip.presence
|
78
|
+
%x`#{bin} --version`.strip.presence
|
79
79
|
rescue StandardError
|
80
80
|
nil
|
81
81
|
end
|
data/vue_cli-rails.gemspec
CHANGED
@@ -13,18 +13,18 @@ Gem::Specification.new do |spec|
|
|
13
13
|
spec.license = 'MIT'
|
14
14
|
|
15
15
|
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
16
|
-
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
16
|
+
%x`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
17
17
|
end
|
18
|
-
spec.require_paths = [
|
18
|
+
spec.require_paths = %w[lib]
|
19
19
|
|
20
20
|
spec.required_ruby_version = '>= 2.3'
|
21
21
|
|
22
|
-
spec.add_dependency
|
23
|
-
spec.add_dependency
|
24
|
-
spec.add_dependency
|
22
|
+
spec.add_dependency('activesupport', '>= 4.2')
|
23
|
+
spec.add_dependency('rack-proxy', '>= 0.6')
|
24
|
+
spec.add_dependency('railties', '>= 4.2')
|
25
25
|
|
26
|
-
spec.add_development_dependency
|
27
|
-
spec.add_development_dependency
|
28
|
-
spec.add_development_dependency
|
29
|
-
spec.add_development_dependency
|
26
|
+
spec.add_development_dependency('bundler', '~> 1.12')
|
27
|
+
spec.add_development_dependency('pry-byebug')
|
28
|
+
spec.add_development_dependency('rake', '~> 10.0')
|
29
|
+
spec.add_development_dependency('rspec', '~> 3.0')
|
30
30
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vue_cli-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Chen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-03-
|
11
|
+
date: 2019-03-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -124,8 +124,6 @@ files:
|
|
124
124
|
- LICENSE
|
125
125
|
- README.md
|
126
126
|
- Rakefile
|
127
|
-
- bin/console
|
128
|
-
- bin/setup
|
129
127
|
- lib/helpers/lib.rb
|
130
128
|
- lib/helpers/lib/cmd.rb
|
131
129
|
- lib/helpers/lib/common.rb
|
@@ -176,8 +174,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
176
174
|
- !ruby/object:Gem::Version
|
177
175
|
version: '0'
|
178
176
|
requirements: []
|
179
|
-
|
180
|
-
rubygems_version: 2.6.14.3
|
177
|
+
rubygems_version: 3.0.2
|
181
178
|
signing_key:
|
182
179
|
specification_version: 4
|
183
180
|
summary: Get vue-cli working with Rails
|
data/bin/console
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
require 'bundler/setup'
|
4
|
-
require 'vue_cli/rails'
|
5
|
-
|
6
|
-
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
-
# with your gem easier. You can also use a different console, if you like.
|
8
|
-
|
9
|
-
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
-
# require "pry"
|
11
|
-
# Pry.start
|
12
|
-
|
13
|
-
require 'pry'
|
14
|
-
Pry.start(__FILE__)
|