2016-07-23 4 views
0

ファイルを簡単にインポートすることはできますが、何らかのプラグイン構造を作ろうとしています。私は、フォルダをスキャンして各Javascriptファイルをロードできるようにしたいと思います。Gjs Gnome Javascriptでファイルを含めるにはどうすればいいですか?

シードJSで、私は、それが呼び出された時点で含まれたファイルに含まれているかのようにファイルをevaluteするSeed.include()を使用することができます。 (reference

ノームのJavascript(GJS)は、同等の機能を持っていますか?

答えて

0

あなたはそれが同じ効果を得るために、文字列とeval()にファイルの内容を読み込むことができます。

は、あなたがプラグイン構造に欲しいものを得るために輸入を使用することはできませんなぜ特別な理由はありますか?ディレクトリをスキャンして各JSファイルをインポートすることもできます。これにより、プラグインがグローバルな名前空間に任意の値をダンプできなくなります。

+0

を感謝を!私は実際にディレクトリをスキャンして各JSファイルをインポートできることに気づいていませんでした。あなたはこれについての参考資料を提供していますか?乾杯! – user2627202

+0

悲しいことに、この文書はありません。ソースコードからしか見つけられません。 – ptomato

1

は、男は明らかにそれが実際に動作しないと文句を言い、この問題についてthreadがあります。とにかくアプローチが大きな方法を吸うので、私はそれが価値があるかどうかわかりません - それは私の意見ではあまりにも面倒です。

だから私は自分のgnome拡張で何をしたのか分かります。

TL; DR:使用ノード+ WebPACKのは、素敵なモジュールシステムとモジュールの膨大なライブラリへのアクセス権を持っています。

  • まず、Node + npmをインストールしました。これは、一緒に使えばモジュールシステムがかなり機能するからです。ボーナス - Node APIを使用しない場合は、パブリックNPMモジュールを使用できます。
  • 私はpackage.jsonファイルを作成し、ここにある:私が使用して取得だから今
var path = require('path'); 

module.exports = { 
    entry: { 
     main: './src/main.js', 
     ui: './src/ui.js' 
    }, 
    output: { 
    filename: '[name].js', 
    path: path.resolve(__dirname), 
     libraryTarget: 'var', 
     library: '[name]' 
    }, 
    resolve: { 
     modules: [ 
      path.resolve('./src'), 
      'node_modules' 
     ] 
    }, 
    externals: { 
     'gnome': 'global', 
     'lang': 'imports.lang', 
     'gi/meta': 'imports.gi.Meta', 
     'gi/shell': 'imports.gi.Shell', 
     'ui/main': 'imports.ui.main', 
     'ui/popupMenu': 'imports.ui.popupMenu', 
     'ui/panelMenu': 'imports.ui.panelMenu', 
     'gi/atk': 'imports.gi.Atk', 
     'gi/st': 'imports.gi.St', 
     'gi/gtk': 'imports.gi.Gtk', 
     'gi/gdk': 'imports.gi.Gdk', 
     'gi/gobject': 'imports.gi.GObject', 
     'gi/gio': 'imports.gi.Gio', 
     'gi/soup': 'imports.gi.Soup', 
     'gi/glib': 'imports.gi.GLib', 
     'gi/clutter': 'imports.gi.Clutter', 
     'misc/config': 'imports.misc.config', 
     'me': 'imports.misc.extensionUtils.getCurrentExtension()' 
    } 
}; 

: は

{ 
    "name": "blah", 
    "version": "0.0.1", 
    "description": "blah", 
    "scripts": { 
    "watch": "nodemon --exec 'npm run build'", 
    "build": "webpack" 
    }, 
    "author": "me", 
    "license": "ISC", 
    "devDependencies": { 
    "nodemon": "^1.11.0", 
    "webpack": "^2.2.1" 
    }, 
    "dependencies": { 
    "string-format": "^0.5.0" 
    } 
} 
  • 次に、私は私のwebpack.config.jsファイルを作成しましたノードのモジュールシステムと私はファイルに自分のものを要求することができます。私はnpm run buildを実行し、webpackは私に内部に必要なすべてのものを走らせることができる素晴らしいタイトなファイルを与えます。

    は、ファイルの例を持っている:

    const Lang = require('lang') 
    const Gdk = require('gi/gdk') 
    
    const parser = require('./parser') 
    const modifier = require('./modifier') 
    
    const rules = [ 
        parser((state, result) => { 
         const name = result.string 
         const rule = new RegExp('^[a-zA-Z0-9]+$') 
         return name && rule.test(name) 
        }, '', true), 
        modifier(Gdk.ModifierType.SUPER_MASK, 'super', false), 
        modifier(Gdk.ModifierType.MOD1_MASK, 'alt', false), 
        modifier(Gdk.ModifierType.CONTROL_MASK, 'control', false), 
        // this makes sure that we have at least one modifier enabled 
        modifier(Gdk.ModifierType.MODIFIER_MASK, false, true) 
    ] 
    
    module.exports = function(state, keyval) { 
        const result = { 
         valid: false, 
         string: '', 
        } 
    
        if(state[0] && keyval[0]) { 
         result.valid = true, 
         result.string = Gdk.keyval_name(keyval[1]) 
    
         rules.forEach((rule) => { 
          result = rule(state[1], result) 
         }) 
        } 
    
        return result 
    } 
    
0

あなたはimports.searchPathに新しいエントリを追加することができます

$ mkdir -p ~/gjs/dynmodules/ 
$ touch ~/gjs/dynmodules/hello.js 

imports.searchPath.push("/home/ole/gjs") 
hello = imports.dynmodules.hello; 
関連する問題