vue_cli-rails 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a3d2c392a2c8770db70caa24b770aa90f3e1df54
4
- data.tar.gz: c4cbc9443eeda1d9fad9834d30b02e8a492d5cb4
3
+ metadata.gz: 0a44cb706df2f61b2e5101a4a9573404f02675c9
4
+ data.tar.gz: a79ae21785870da2ccfed2d6d5a3531eb6e8d311
5
5
  SHA512:
6
- metadata.gz: 32cf498f71dee9a13a68d91a748ca940e38de76d7e59501903ec60defc54866b3299d0d442c004e5478e00ff6e9c0146a2e8ea9ecfa35671876501ffc69336e5
7
- data.tar.gz: 61c43a19b5aa1192943b140e4a9246d1080ba08ff29ac58c55fc1a47f08597c9cbf163a04316bcc29b9ebafcfea35519e300431c27b8e8b49e08796a97cf364b
6
+ metadata.gz: 9818770c03f196e790c7958ae97275078132863e47c2984d8ae55b1015b2fb220856094a8a11d0d9eba23e6a0a1e70a54deec63d30aff022adbabe6d481281e4
7
+ data.tar.gz: 490f5bc397ce60f69302a2272bcf516ecdcff0fa639c312d49ce3827bcc6481d930bdd2f10def1e1f21421608899572c8f9e9047eb8d06118640e4ccfcd62627
data/README.md CHANGED
@@ -1,6 +1,8 @@
1
1
  # VueCli::Rails
2
2
 
3
- Get `vue-cli` working on Rails
3
+ Get `vue-cli` working on Rails.
4
+
5
+ Currently, I am still actively developing this gem. It's usable but lacks of documentation. I will update it once the main features are ready and well-tested.
4
6
 
5
7
  ## Installation
6
8
 
@@ -15,18 +17,16 @@ And then execute:
15
17
  $ bundle install
16
18
  $ bundle exec rake vue:create
17
19
 
18
- Add those lines to your `config/routes.rb`:
20
+ Follow the steps and copy demo codes, than you can add lines below to your `config/routes.rb`:
19
21
 
20
22
  ```ruby
21
23
  get 'vue/foo' => 'vue#foo'
22
24
  get 'vue/bar' => 'vue#bar'
23
25
  ```
24
26
 
25
- > Currently `rake vue:create` will overwrite all files, please be careful!
26
-
27
27
  ## Usage
28
28
 
29
- This gem is fully depends on `vue-cli`. You can do everything with [`vue.config.js`](https://cli.vuejs.org/config/) just don't break `manifest` plugin which required by `vue_cli-rails`.
29
+ This gem is fully depends on `vue-cli`. You can do anything with [`vue.config.js`](https://cli.vuejs.org/config/) just don't break `manifest` plugin which required by `vue_cli-rails`.
30
30
 
31
31
  When you starting `rails server` with development mode, `vue-cli-service serve` will be running at the same time.
32
32
 
@@ -1,8 +1,3 @@
1
- // Please do NOT edit settings required by vue_cli-rails
2
- /* [DO NOT EDIT!] begin */
3
- const WebpackAssetsManifest = require('webpack-assets-manifest');
4
- /* [DO NOT EDIT!] end */
5
-
6
1
  // const CompressionWebpackPlugin = require('compression-webpack-plugin');
7
2
  // const { BundleAnalyzerPlugin } = require('webpack-bundle-analyzer');
8
3
 
@@ -13,7 +8,7 @@ const {
13
8
  outputDir,
14
9
  devServer,
15
10
  publicPath,
16
- manifestOutput,
11
+ manifest,
17
12
  isProd,
18
13
  } = require('./vue.rails');
19
14
 
@@ -21,6 +16,7 @@ module.exports = {
21
16
  outputDir,
22
17
  publicPath,
23
18
  devServer,
19
+ css,
24
20
  chainWebpack: (config) => {
25
21
  config
26
22
  // clear entry points if there is any
@@ -29,14 +25,8 @@ module.exports = {
29
25
  .end()
30
26
  /* [DO NOT EDIT!] begin */
31
27
  .plugin('manifest')
32
- .use(WebpackAssetsManifest)
33
- .init(Plugin => new Plugin({
34
- integrity: false,
35
- entrypoints: true,
36
- writeToDisk: true,
37
- publicPath: true,
38
- output: manifestOutput,
39
- }))
28
+ .use(manifest.plugin)
29
+ .init(Plugin => new Plugin(manifest.options))
40
30
  .end()
41
31
  /* [DO NOT EDIT!] end */
42
32
  .plugins
@@ -73,7 +63,6 @@ module.exports = {
73
63
  */
74
64
  }
75
65
  },
76
- css,
77
66
  configureWebpack: {
78
67
  entry,
79
68
  resolve: {
@@ -4,6 +4,7 @@ module.exports = (() => {
4
4
  let settings = {};
5
5
 
6
6
  /* eslint-disable global-require,import/no-extraneous-dependencies */
7
+ const WebpackAssetsManifest = require('webpack-assets-manifest');
7
8
  try {
8
9
  const yaml = require('js-yaml');
9
10
  const { readFileSync, readdirSync, lstatSync } = require('fs');
@@ -56,8 +57,22 @@ module.exports = (() => {
56
57
  }
57
58
  /* eslint-enable global-require,import/no-extraneous-dependencies */
58
59
 
60
+ const assets = {};
61
+ const manifest = {
62
+ plugin: WebpackAssetsManifest,
63
+ assets,
64
+ options: {
65
+ assets,
66
+ entrypoints: true,
67
+ writeToDisk: true,
68
+ publicPath: true,
69
+ output: settings.manifestOutput,
70
+ },
71
+ };
72
+
59
73
  return {
60
74
  ...settings,
75
+ manifest,
61
76
  isProd: settings.env === 'production',
62
77
  };
63
78
  })();
data/lib/source/vue.yml CHANGED
@@ -1,6 +1,6 @@
1
1
  default: &default
2
2
  package_manager: #PACKAGE_MANAGER
3
- manifestOutput: app/assets/vue/manifest.dev.json
3
+ manifestOutput: tmp/manifest.dev.json
4
4
  public_output_path: vue_assets
5
5
  alias:
6
6
  '@': app/assets/vue
data/lib/tasks/vue.rake CHANGED
@@ -1,28 +1,94 @@
1
1
  namespace :vue do
2
2
  desc 'Run vue-cli create and regenerate configuration'
3
- task :create, [:package_manager] do |_t, args|
3
+ task :create do
4
4
  pm = VueCli::Rails::NodeEnv.new
5
- pm.use!(args.package_manager)
6
- root = ::Rails.root
5
+ abort('Cannot find node.js') unless pm.node?
7
6
 
8
- # generate config/vue.yml
9
- FileUtils.chdir root
10
- # `vue create .` and dependencies
11
- pm.exec('vue create', '', "-n -m #{pm.package_manager} .")
12
- pm.add '-D webpack-assets-manifest js-yaml'
13
- FileUtils.rm_rf root.join('src')
7
+ get_input = ->(message, list = 'Yn') {
8
+ list = list.chars
9
+ default = list.find { |c| c.upcase == c }
10
+ list = list.map { |c| c == default ? c : c.downcase }.uniq
11
+ valid = "[#{list.join('')}]"
12
+ list = list.map(&:downcase)
13
+ print "#{message} #{valid}"
14
+ loop do
15
+ r = STDIN.gets.chop.downcase
16
+ break default if r == ''
17
+ break r if list.include?(r)
18
+ print " [INVALID!] Please retry: #{valid}:"
19
+ end
20
+ }
21
+
22
+ # 1. package manager
23
+ yarn = pm.yarn_version
24
+ npm = pm.npm_version
25
+ if yarn
26
+ if npm
27
+ input = get_input.call('Which package manager to use (Y=Yarn, N=npm)?')
28
+ pm.use!(input == 'n' ? :npm : :yarn)
29
+ else
30
+ pm.use!(:yarn)
31
+ end
32
+ elsif npm
33
+ pm.use!(:npm)
34
+ else
35
+ abort('Cannot find npm or yarn')
36
+ end
37
+ puts "Using package manager: #{pm.package_manager}"
14
38
 
15
- # dirs under `app`
16
39
  src_dir = Pathname.new(__FILE__).dirname.join('..', 'source')
17
- FileUtils.cp_r(src_dir.join('app'), root)
18
- binding.pry
19
- Dir[src_dir.join('vue.*.js')].each do |fn|
20
- FileUtils.cp(fn, "#{root}/")
40
+ root = ::Rails.root
41
+ FileUtils.chdir root
42
+
43
+ # 2. vue create .
44
+ input = 'y'
45
+ pack = root.join('package.json')
46
+ if pack.exist?
47
+ puts 'Detected `package.json`!'
48
+ input = get_input.call(' Do you want to rerun `vue create?`', 'yN')
49
+ end
50
+ pm.exec('vue create', '', "-n -m #{pm.package_manager} .") if input == 'y'
51
+
52
+ # 3. dev-dependencies
53
+ package = JSON.parse(pack.read)
54
+ dev_deps = package['devDependencies']
55
+ dd = %w[webpack-assets-manifest js-yaml].find_all do |dep|
56
+ !dev_deps.key?(dep)
57
+ end
58
+ pm.add "-D #{dd.join(' ')}" if dd.any?
59
+
60
+ # 4. remove `src` folder
61
+ src = root.join('src')
62
+ if src.exist? && src.directory?
63
+ puts 'Detected `src` folder (should be generated by vue-cli)'
64
+ input = get_input.call(' Do you want to delete src folder?')
65
+ FileUtils.rm_rf root.join('src') if input == 'y'
66
+ end
67
+
68
+ # 5. copy sample codes
69
+ input = get_input.call('Do you want to copy demo code?', 'yN')
70
+ FileUtils.cp_r(src_dir.join('app'), root) if input == 'y'
71
+
72
+ # 6. config files
73
+ FileUtils.cp(src_dir.join('vue.rails.js'), "#{root}/")
74
+ input = 'y'
75
+ if root.join('vue.config.js').exist?
76
+ puts 'Detected `vue.config.js`!'
77
+ input = get_input.call(' Do you want to overwrite vue.config.js?', 'yN')
21
78
  end
79
+ FileUtils.cp(src_dir.join('vue.config.js'), "#{root}/") if input == 'y'
22
80
 
23
- yml = src_dir.join('vue.yml').read
24
- yml = yml.sub('#PACKAGE_MANAGER', pm.package_manager.to_s)
25
- root.join('config', 'vue.yml').write(yml)
81
+ # 7. generate config/vue.yml
82
+ yml_dest = root.join('config', 'vue.yml')
83
+ if yml_dest.exist?
84
+ puts 'Detected `config/vue.yml`!'
85
+ input = get_input.call(' Do you want to overwrite config/vue.yml?')
86
+ end
87
+ if input == 'y'
88
+ yml = src_dir.join('vue.yml').read
89
+ yml = yml.sub('#PACKAGE_MANAGER', pm.package_manager.to_s)
90
+ yml_dest.write(yml)
91
+ end
26
92
  end
27
93
 
28
94
  desc 'Add pug template support: formats=pug,sass,less,stylus'
@@ -4,14 +4,14 @@ module VueCli
4
4
  def vue_entry(name)
5
5
  @config ||= VueCli::Rails::Configuration.instance
6
6
 
7
- entry = @config.manifest_data['entrypoints']&.fetch(name)
7
+ entry = (@config.manifest_data['entrypoints'] || {})[name]
8
8
  return nil if entry.blank?
9
9
 
10
10
  assets = []
11
- entry['css']&.each do |css|
11
+ (entry['css'] || []).each do |css|
12
12
  assets << stylesheet_link_tag(css)
13
13
  end
14
- entry['js']&.each do |js|
14
+ (entry['js'] || []).each do |js|
15
15
  assets << javascript_include_tag(js)
16
16
  end
17
17
 
@@ -4,29 +4,24 @@ module VueCli
4
4
  NODE_BIN_LIST = %i[node yarn npm npx vue].freeze
5
5
 
6
6
  def initialize
7
- h = {}
8
- NODE_BIN_LIST.each do |bin|
9
- h[bin] = get_version_of(bin)
10
- end
11
- @versions = h
7
+ @versions = {}
12
8
  yield(self) if block_given?
13
9
  end
14
10
 
15
11
  NODE_BIN_LIST.each do |bin|
16
12
  define_method :"#{bin}_version" do
17
- @versions[bin]
13
+ get_version_of(bin)
18
14
  end
19
15
 
20
16
  define_method :"#{bin}?" do
21
- @versions[bin].present?
17
+ get_version_of(bin).present?
22
18
  end
23
19
  end
24
20
 
25
21
  def use!(pm)
26
- @pm = (pm || (yarn? ? 'yarn' : 'npm')).to_sym
27
- unless (@pm == :npm || @pm == :yarn) && self.try(:"#{@pm}?")
28
- raise(VueCli::Rails::Error, "Unknown package manager: #{@pm}")
29
- end
22
+ @pm = pm.to_sym
23
+ raise(ArgumentError, "Unsupported manager: #{@pm}") unless %i[npm yarn].include?(@pm)
24
+ raise(VueCli::Rails::Error, "Not installed: #{@pm}") unless self.try(:"#{@pm}?")
30
25
  end
31
26
 
32
27
  def package_manager
@@ -65,10 +60,11 @@ module VueCli
65
60
  private
66
61
 
67
62
  def get_version_of(bin)
68
- r = `#{bin} --version`.strip.presence
69
- return nil if r.nil?
63
+ return @versions[bin] if @versions.key?(bin)
70
64
 
71
- r.start_with?('v') ? r[1..-1] : r
65
+ r = `#{bin} --version`.strip.presence
66
+ @versions[bin] = r && r.start_with?('v') ? r[1..-1] : r
67
+ @versions[bin]
72
68
  end
73
69
 
74
70
  def version_ge?(v1, v2)
@@ -1,5 +1,5 @@
1
1
  module VueCli
2
2
  module Rails
3
- VERSION = "0.1.2"
3
+ VERSION = "0.1.3"
4
4
  end
5
5
  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.1.2
4
+ version: 0.1.3
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-02-24 00:00:00.000000000 Z
11
+ date: 2019-02-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport