1

http://gregblogs.com/how-django-reactjs-and-browserify/をフォローしようとしています。動作するようにいくつかのフープを通過しcollectstaticましたが、現在はエラーなしで実行されます。ただし、反応コンポーネントを含むページを読み込もうとすると、別のコンパイル プロセスが開始されます (collectstatic はすべてを前処理し、実行時に何もコンパイルする必要はないと考えました)。今すぐ機能させるには、いくつかのハックが必要です ( https://github.com/j0hnsmith/django-pipeline-browserify/issues/14 )。しかし、そのパッチの後でも、残念ながらこのコンパイルはエラーになります。コマンドは今は問題ないようですが、実行すると

C:\Users\JohnSmith\node_modules\.bin\browserify.cmd -t babelify --deps C:\Users\JohnSmith\Documents\test\company\static\dashboard\js\react_test_dashboard_widget.browserify.js

エラーなしで実行され、依存関係 JSON が生成されます。Django/Pipeline で同じコマンドをサブプロセスとして実行すると、次のようにエラーになります。

Error: Cannot find module ' babelify' from 'C:\Users\JohnSmith\Documents\test\company

それを克服する方法は?

packages.json スニペット

"dependencies": {
  "babel-cli": "^6.6.5",
  "babel-preset-es2015": "^6.6.0",
  "yuglify": "^0.1.4",
  "babelify": "^7.3.0",
  "browserify": "^13.0.1",
  "jquery": "^2.2.0",
  "react": "^15.2.0"
},
"devDependencies": {
  "babel-plugin-transform-class-properties": "^6.10.2",
  "babel-plugin-transform-react-jsx": "^6.8.0",
  "babel-preset-es2016": "^6.11.0",
  "babel-preset-react": "^6.11.1"
}

要件スニペット:

...
django-pipeline==1.6.6
django-pipeline-browserify==0.4.1
futures==3.0.5
...

いくつかの設定 (ところでhttps://github.com/j0hnsmith/django-pipeline-browserify/issues/15 ):

PIPELINE["CSS_COMPRESSOR"] = "pipeline.compressors.NoopCompressor"
PIPELINE["JS_COMPRESSOR"] = "pipeline.compressors.NoopCompressor"
PIPELINE['SASS_BINARY'] = 'C:\\Ruby22-x64\\bin\\sass.bat'
PIPELINE['BABEL_BINARY'] = 'c:\\Users\\JohnSmith\\node_modules\\.bin\\babel.cmd'
PIPELINE['BROWSERIFY_BINARY'] = 'c:\\Users\\JohnSmith\\node_modules\\.bin\\browserify.cmd'
PIPELINE_BROWSERIFY_BINARY = PIPELINE['BROWSERIFY_BINARY']

if DEBUG:
    PIPELINE["BROWSERIFY_ARGUMENTS"] = '-t babelify'
    PIPELINE_BROWSERIFY_ARGUMENTS = PIPELINE["BROWSERIFY_ARGUMENTS"]

(最後の 1 つはコンパイラに必要でした!) 私のシステム: Win 10、Python 2.7、Django 1.8

他に何を指定すればよいか教えてください


更新: エラー メッセージは Node 自体から来ています。以下のコール スタックを参照してください。ここでは、モジュール名の代わりに変換 JS ファイルを明示的に指定しようとしたことに注意してください (これはコマンド ラインからもうまく機能しますが、アプリではうまく機能しません)。

CompilerError: ['c:\\Users\\JohnSmith\\node_modules\\.bin\\browserify.cmd', '-t  c:\\Users\\JohnSmith\\Documents\\test\\node_modules\\babelify\\index.js', u'--deps C:\\Users\\JohnSmith\\Documents\\test\\company\\static\\dashboard\\js\\react_test_dashboard_widget.browserify.js'] exit code 1
Error: Cannot find module '  c:\Users\JohnSmith\Documents\test\node_modules\babelify\index.js' from 'C:\Users\JohnSmith\Documents\test\company'
    at c:\Users\JohnSmith\node_modules\resolve\lib\async.js:46:17
    at process (c:\Users\JohnSmith\node_modules\resolve\lib\async.js:173:43)
    at ondir (c:\Users\JohnSmith\node_modules\resolve\lib\async.js:188:17)
    at load (c:\Users\JohnSmith\node_modules\resolve\lib\async.js:69:43)
    at onex (c:\Users\JohnSmith\node_modules\resolve\lib\async.js:92:31)
    at c:\Users\JohnSmith\node_modules\resolve\lib\async.js:22:47
    at FSReqWrap.oncomplete (fs.js:82:15)

これは、ノード自体がパラメータをキャプチャし、tそれを に渡さないことが問題である可能性があることを示していますbrowserify。確かに、この問題は重大かもしれません: https://github.com/j0hnsmith/django-pipeline-browserify/issues/14

https://github.com/j0hnsmith/django-pipeline-browserify/blob/master/pipeline_browserify/compiler.py#L55をオーバーライドしました

    command = "%s %s %s --deps %s" % (
        getattr(settings, 'PIPELINE_BROWSERIFY_VARS', ''),
        getattr(settings, 'PIPELINE_BROWSERIFY_BINARY', '/usr/bin/env browserify'),
        getattr(settings, 'PIPELINE_BROWSERIFY_ARGUMENTS', ''),
        self.storage.path(infile),
    )

    command = (
        getattr(settings, 'PIPELINE_BROWSERIFY_BINARY', '/usr/bin/env browserify'),
        getattr(settings, 'PIPELINE_BROWSERIFY_ARGUMENTS', ''),
        "--deps %s" % self.storage.path(infile),
    )

パイプライン コンパイラ コードはタプルを想定しているためです。元のコードでは、1 つの完全な文字列を受け取りましたが、それを個々の文字に分解し、それらすべてが引数であると考えました。 https://github.com/jazzband/django-pipeline/blob/master/pipeline/compilers/を参照してください。 init .py#L108

    argument_list = []
    for flattening_arg in command:
        if isinstance(flattening_arg, string_types):
            argument_list.append(flattening_arg)
        else:
            argument_list.extend(flattening_arg)

これは後で災害につながります。

CompilerError: [Error 87] The parameter is incorrect
4

1 に答える 1