<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>yepnope.js &#8211; Mach3.laBlog</title>
	<atom:link href="https://blog.mach3.jp/tag/yepnope-js/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.mach3.jp</link>
	<description></description>
	<lastBuildDate>Thu, 21 Apr 2011 01:10:35 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>
	<item>
		<title>条件分岐に特化したリソースローダー「yepnope.js」を試してみる</title>
		<link>https://blog.mach3.jp/2011/04/21/yepnope-js.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Thu, 21 Apr 2011 01:10:35 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[head.js]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Library]]></category>
		<category><![CDATA[Loader]]></category>
		<category><![CDATA[yepnope.js]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=1773</guid>

					<description><![CDATA[最近ブログ記事のソースコードで見かけるようになった「yepnope.js」を試してみました。 条件分岐によって読むリソースを切り分ける事に特化したライブラリです。 yepnope.jsとは yepnope.js &#124; A  [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>最近ブログ記事のソースコードで見かけるようになった「yepnope.js」を試してみました。<br />
条件分岐によって読むリソースを切り分ける事に特化したライブラリです。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh5.googleusercontent.com/_JJkNs5Ixl70/Ta8a3xZKMfI/AAAAAAAABRc/0wOEy_xcmO0/201104210240.png" alt="条件分岐に特化したリソースローダー「yepnope.js」を試してみる"/></figure>



<p></p>



<span id="more-1773"></span>



<h2 class="wp-block-heading">yepnope.jsとは</h2>



<p><a href="http://yepnopejs.com/">yepnope.js | A Conditional Loader For Your Polyfills!</a></p>



<figure class="wp-block-image"><img decoding="async" src="https://lh3.googleusercontent.com/_JJkNs5Ixl70/Ta8a8Txez6I/AAAAAAAABRg/KgUOlep2XoQ/201104210238.png" alt="yapnope.js"/></figure>



<p></p>



<p>手書き風のロゴがかわいい。</p>



<p><em>yep</em>はyes、<em>nope</em>はnoの口語体で、固く言えば「yesno.js」。<br />
与えた条件がtrueの場合とfalseの場合で読むJS/CSSを切り替えるのが得意な<br />
リソースローダーです。</p>



<h2 class="wp-block-heading">最も簡単なサンプル</h2>


<pre class="wp-block-code"><span><code class="hljs language-javascript">yepnope(<span class="hljs-string">"hoge.js"</span>);
yepnope(<span class="hljs-string">"style.css"</span>);
</code></span></pre>


<p>単一ファイルをロードするだけの簡単なサンプルです。<br />
内部的には、ドキュメント内で一番最初のScript要素を探して、<br />
その前にinsertBeforeしているみたい。</p>



<p>ちなみに、スクリプトローダーではなく<em>「リソースローダー」</em>なので<br />
JavaScriptだけではなくCSSもロード出来ます。</p>



<h2 class="wp-block-heading">複数ファイルを読んでみる</h2>


<pre class="wp-block-code"><span><code class="hljs language-css"><span class="hljs-selector-tag">yepnope</span>({
    <span class="hljs-attribute">load </span>: &#91; <span class="hljs-string">"hoge.js"</span>, <span class="hljs-string">"fuga.js"</span> ]
});
</code></span></pre>


<dl>
<dt>load</dt>
<dd>後述するtestの結果に関わらず、とにかく読み込む。</dd>
</dl>



<h2 class="wp-block-heading">条件分岐で読むJSを分ける</h2>


<pre class="wp-block-code"><span><code class="hljs language-css"><span class="hljs-selector-tag">yepnope</span>({
    <span class="hljs-attribute">test </span>: (<span class="hljs-string">'localStorage'</span> in window) &amp;&amp; window&#91;<span class="hljs-string">'localStorage'</span>] !== null,
    yep : &#91; <span class="hljs-string">"hoge.js"</span>, <span class="hljs-string">"fuga.js"</span> ], <span class="hljs-comment">/* testの結果がtrueの場合こっちを読む */</span>
    nope : &#91; <span class="hljs-string">"foo.js"</span>, <span class="hljs-string">"bar.js"</span> ] <span class="hljs-comment">/* testの結果がfalseの場合こっちを読む */</span>
});
</code></span></pre>


<dl>
<dt>test</dt>
<dd>基準となる条件文等</dd>
<dt>yep</dt>
<dd>testがtrueの時に読み込むファイル。単一ファイルの場合は文字列でも可。</dd>
<dt>nope</dt>
<dd>testがfalseの時に読み込むファイル。単一ファイルの場合は文字列でも可。</dd>
</dl>



<p>上の例は、localStorageが使用可能である場合は<em>yep</em>に設定したhoge.js,fuga.jsがロードされ、<br />
そうでない場合は<em>nope</em>に設定したfoo.js,bar.jsがロードされます。</p>



<h2 class="wp-block-heading">コールバックを設定する</h2>


<pre class="wp-block-code"><span><code class="hljs language-javascript">yepnope({
    <span class="hljs-attr">test</span> : (<span class="hljs-string">'localStorage'</span> <span class="hljs-keyword">in</span> <span class="hljs-built_in">window</span>) &amp;&amp; <span class="hljs-built_in">window</span>&#91;<span class="hljs-string">'localStorage'</span>] !== <span class="hljs-literal">null</span>,
    <span class="hljs-attr">yep</span> : &#91; <span class="hljs-string">"hoge.js"</span>, <span class="hljs-string">"fuga.js"</span> ],
    <span class="hljs-attr">nope</span> : &#91; <span class="hljs-string">"foo.js"</span>, <span class="hljs-string">"bar.js"</span> ]
    <span class="hljs-attr">callback</span> : <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"> url, result, key </span>)</span>{
        <span class="hljs-built_in">console</span>.log( url ); <span class="hljs-comment">/* ロードされたリソースのURL */</span>
        <span class="hljs-built_in">console</span>.log( result ); <span class="hljs-comment">/* testの結果（true|false） */</span>
        <span class="hljs-built_in">console</span>.log( key ); <span class="hljs-comment">/* yep|nope におけるインデックス（またはキー） */</span>
    },
    <span class="hljs-attr">complete</span> : <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
        <span class="hljs-built_in">console</span>.log( <span class="hljs-string">"全部読み込み終わりました！"</span> );
    }
});
</code></span></pre>


<p>ロード完了時の処理を<em>callback/complete</em>で設定出来ます。<br />
ファイルのロードは非同期に行われる為、<br />
読むリソースを元に何かを処理したい場合はこれらのコールバックを使用します。</p>



<dl>
<dt>callback</dt>
<dd>リソースが読み込まれる度に呼ばれる。</dd>
<dt>complete</dt>
<dd>全リソースがロードし終えた時に一度だけ呼ばれる。</dd>
</dl>



<h2 class="wp-block-heading">「無ければ読めばいいじゃない」を実装する</h2>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-keyword">var</span> Init = <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
    <span class="hljs-keyword">if</span>( !<span class="hljs-built_in">window</span>.MyClass ){ <span class="hljs-keyword">return</span>; }
    <span class="hljs-keyword">new</span> MyClass();
};

yepnope({
    <span class="hljs-attr">test</span> : <span class="hljs-built_in">window</span>.MyClass,
    <span class="hljs-attr">nope</span> : <span class="hljs-string">"myclass.js"</span>,
    <span class="hljs-attr">complete</span> : Init
});
</code></span></pre>


<p><strong>myclass.js</strong></p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-keyword">var</span> MyClass = <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
    <span class="hljs-built_in">console</span>.log( <span class="hljs-string">"Hello, MyClass"</span> );
};
</code></span></pre>


<p>MyClassが無い場合はjsファイルをロードしてから、<br />
既にある場合はスルーして<em>complete</em>が呼ばれるのでそのまま初期化。</p>



<p>コールバックで再度条件分岐をしているのは、myclass.jsが読み込めたかどうかの保証が無い為。<br />
myclass.jsが404でも、タイムアウト後に<em>complete</em>は呼ばれてしまいます。</p>



<h2 class="wp-block-heading">まとめ</h2>



<p>以前、<a href="/2011/03/headjs.html">ローダーもくっついている器用な「head.js」</a>を記事にしましたが、<br />
やはり特化したローダーともなると、さすがに色々と気が効いています。<br />
基本的にJavaScriptファイルはパックしてしまう事が多いのですが、<br />
新要素のフォールバック等にはかなり活用出来るかもしれませんね！</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
