質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
jQueryプラグイン

jQueryの拡張機能。 様々な種類があり、その数は膨大です。公開済みのプラグインの他にも、自作することもできます。 jQueryで利用できるようにしておくだけで、導入およびカスタマイズが比較的容易に行なえます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

1回答

2369閲覧

browserify を使って、jQueryとClEditorを単一ファイルにコンパイルおよびrequire可能にしたい

philomagi

総合スコア267

jQueryプラグイン

jQueryの拡張機能。 様々な種類があり、その数は膨大です。公開済みのプラグインの他にも、自作することもできます。 jQueryで利用できるようにしておくだけで、導入およびカスタマイズが比較的容易に行なえます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2016/11/18 16:15

編集2016/11/19 04:47

現在、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に配置しています。

###現在発生している問題

  1. require('jquery')をしても、$("...")のメソッドをブラウザのコンソールから利用できない

参考先のページで挙げられているvar $ = require('jquery');の例と同じ状態です。上記設定でコンポーネントにrequire('jquery');と記述してやれば、後はgulpからbrowserifyを実行することで$がグローバルにexportされていることを期待していました。

  1. $ではなくjQueryをexportできない

上記設定ファイルの"global:$""jquery": "$"部分の$をjQueryに変更してやれば、グローバルにjQueryがexportされると思っていましたが、未定義の変数としてエラーになってしまいます。

  1. 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が正常に実行されません。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

根本的なところとして、「jQuery本体もまとめてビルド」と「browserify-shimでjQueryを呼び出す」ことは両立しません

browserify-shimは、<script>要素など別途でグローバル空間に現れているオブジェクトをbrowserifyのrequireから使うための手段です。つまり、browserify-shimでjQueryを呼び出すようにした場合、<script>別にjQueryを読み込んでおく必要があります

投稿2016/11/19 00:51

編集2016/11/19 00:52
maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

philomagi

2016/11/19 04:48

ご回答ありがとうございます。browserify-shimの用途を、完全に誤解していたようです。 browserify-shimを用いず、browserifyのみで再度試みましたが、未だ上手くいきません。 jQuery本体をビルド後のjsに組み込むのは成功するのですが、cleditorの組み込みが上手くいきません。 package.jsonを編集し、コンポーネント側の記述も更新しましたが、cleditor部分が何故か"cleditor = function cleditor(...){ ... }" とされており、"cleditor is not defined"とエラーが出されてしまいます。 詳細については、質問本文に追記しております。
philomagi

2017/02/05 07:56

最終的に、cleditorではなくvue-html-editorをVue2.0用に改造したものを利用することにしました。 ご回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問