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