現在、Rails5.0 + Vue.js2.0でシングルページのアプリケーションを開発しており、
一部ページにhtmlエディタを追加するためにcleditorを利用しようと試みています。
現在gulp + browserifyを使って一つのminifyされたjsファイルをビルドしているのですが、
jQueryおよびcleditorのソースコードもビルド後のjsファイルにgulp実行で組み込みたいと考えています。
また、htmlエディタを使用するページは極一部なので、使用するページのコンポーネントでのみ
require('jquery')およびrequire('cleditor')等として依存関係を作りたいと考えています。
上記を達成するためのツールとして、browserify-shimが有効そうだということで、
各解説を検索し色々と試行錯誤したのですが、期待通りの結果どころか、解説通りにもなりません。
作業時は、主にこちらのページを参照しました。
###package.json
json
1{ 2 ... 3 (略) 4 "browserify": { 5 "transform": [ 6 "babelify", 7 "browserify-shim", 8 "vueify" 9 ] 10 }, 11 "browser": { 12 "vue": "vue/dist/vue" 13 }, 14 "browserify-shim": { 15 "jquery": "$", 16 "../client/vendor/cleditor/jquery.cleditor.js" : { 17 "depends": ["global:$"], 18 "exports": "ClEditor" 19 } 20 }, 21 (略) 22 ...
cleditorはnpmに公開されていなかったので、ソースコードをDLしたものをclient/vendorに配置しています。
###現在発生している問題
require('jquery')
をしても、$("...")のメソッドをブラウザのコンソールから利用できない
参考先のページで挙げられているvar $ = require('jquery');
の例と同じ状態です。上記設定でコンポーネントにrequire('jquery');
と記述してやれば、後はgulpからbrowserifyを実行することで$がグローバルにexportされていることを期待していました。
- $ではなくjQueryをexportできない
上記設定ファイルの"global:$"
と"jquery": "$"
部分の$をjQueryに変更してやれば、グローバルにjQueryがexportされると思っていましたが、未定義の変数としてエラーになってしまいます。
- cleditorがexportされない
コンポーネント側にrequire('ClEditor');
と記載しても、not found module
となり、requireされません。
0. cleditorをrequireできても、エラーになる。
requireの引数をモジュール名ではなくファイルのパス名を直接指定すると、browserifyによってビルド後のファイルにcleditorおよびjqueryのソースコードが追加されます。しかし、cleditorのソースコードが下記のような状態になり、エラーとなってしまいます。
javascript
1// cleditor is not defined 2// 元のソースコードは単にcleditor = function(r, f) {...}と匿名関数を代入している。 3// 検索をかけても、以下のような箇所は見つからない。 4cleditor = function cleditor(r, f) { 5...(略) 6}
他の解説ページや、github・npmのbrowserify-shimのリファレンスも参照してみましたが、手がかりを見つけられませんでした。
- 上記package.jsonをどのように修正すれば、上記1.~4.の問題を解決できるでしょうか。いずれか一つのみでも構いません。
- 冒頭で説明させていただいた目的を達成するにあたり、browserify-shimが解決法として適切でない、という可能性は有るでしょうか。もしそうであれば、代替手段としてどのような物があり得るでしょうか。
- そもそもjQueryおよびcleditorもまとめてビルドしようというアプローチ自体が間違っているのでしょうか。素直にscriptタグを使うべきなのでしょうか。
以上、些細なことでもヒントや手がかりをいただければ幸いです。情報の不足が有れば追記いたしますので、ぜひご指摘ください。
###追記 cleditorをrequireするとエラー
browserify-shimの用途を完全に誤解していたようなので、タイトルを変更すると共に、browserifyのみでの実施に切り替えました。
jQueryをビルド後のファイル(build.jsとします)に組み込むことは成功したのですが、cleditorの組み込みが上手くいきません。
設定およびディレクトリ構成は以下の通りです。
######package.json
json
1{ 2 "browserify": { 3 "transform": [ 4 "babelify", 5 "vueify" 6 ] 7 }, 8 "browser": { 9 "vue": "vue/dist/vue", 10 "cleditor": "./client/vendor/cleditor/jquery.cleditor.min.js" 11 }, 12}
/ - app/ - bin/ - client/ # クライアントサイドのjsファイルを配置しています - app/ - main.js - vendor/ # cleditor等、npmで公開されていない外部ライブラリ - cleditor/ - jquery.cleditor.min.js - jquery.cleditor.js - jquery.cleditor.css - public/ - app/ - build.js - build.css - 以下略 ... - package.json
また、main.js内でwindow.jQuery = window.$ = require('jquery')
を実行し、グローバル空間に$, jQuery
を展開しています。
この状態でbrowserifyを実行すると、jQueryは正常にbuild.js内に組み込まれ、cleditorもまた、 build.js内に含まれているようです。
しかし、実際に画面を表示しようとすると、先述した「現在発生している問題」の4.が発生してしまい、jsが正常に実行されません。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/11/19 04:48
2017/02/05 07:56