2017-02-03 5 views
0

another questionScalaJS bundlerを使用してNPMの依存関係をインポートすることをお勧めしました。クライアントのみのアプリケーションでscalajs-bundlerを使用する方法

単純なクライアント専用WebアプリケーションでJavascript NPMパッケージを使用したいと思います。これを示すan example called staticがあります。例に 私の変更:

はbuild.sbtに追加:

npmDependencies in Compile += "esprima" -> "3.1.3" 

はMain.scalaに追加:Main.scala

import Esprima._ 
import JsonToString._ 
val code = "answer = 42" 
val tokens = tokenize(code) 
val tokensStr = tokens.json 

変更:"This is bold"

s"This is bold $tokensStr"へのファサードを(少し簡略化されています。フルバージョンは GitHubを参照してください):

Uncaught TypeError: Cannot read property 'tokenize' of undefined

static-fastopt-bundle.jsを検査することに使用されるesprimaを示しているが、そのjsがバンドルされていない。

import scala.scalajs.js 
import scala.scalajs.js.annotation.JSName 

@JSName("esprima") 
@js.native 
object Esprima extends js.Object { 

    def tokenize(input: String, config: js.Any = js.native, delegate: String => String = js.native): js.Array[js.Any] = js.native 

    def parse(input: String, config: js.Any = js.native): js.Dynamic = js.native 
} 
fastOptJS::webpackエラーで生成されたHTMLを実行しています。

依存関係をクライアント専用のWebページに追加するには、他にどのような手順が必要ですか?

+0

'scalajs-bundler' GitHubについて[#105](https://github.com/scalacenter/scalajs-bundler/issues/105)と尋ねられました。 – Suma

+0

あなたの質問にファサードの定義を含める必要があります –

答えて

2

ドキュメントのthis partで説明したように、あなたはあなたのファサード定義で@JSImportを使用する必要があります。参考のため

@JSImport("esprima", JSImport.Namespace) 

@JSImportがAと結合したファサードを定義しながら@JSNameは、グローバル名にバインドされたファサードを定義しますrequire d JavaScriptモジュール。

+0

グレート。依存関係をどのように定義するかによって、必要とされる異なるファサードの少しの欠点を見てください。少なくともそれは機能します。パッケージは同じです。 webjarsとbundler分散パッケージの両方に同じファサードを使用する方法はありますか? – Suma

+0

これはe.q [jquery facade](https://github.com/scala-js/scala-js-jquery)のようです。私はそれを確認し、おそらくこの答えに追加します。 – Suma

関連する問題