Я пытаюсь следовать http://gregblogs.com/how-django-reactjs-and-browserify/. Я прошел через обручи, чтобы получить collectstatic
, но он работает без ошибок. Однако, когда я пытаюсь загрузить страницу, содержащую мой компонент реакции, запускается другой процесс компиляции (я думал, что collectstatic будет предварительно обрабатывать все, и ничто не будет необходимо для компиляции времени выполнения). Это требует некоторого взлома, чтобы заставить его работать прямо сейчас (https://github.com/j0hnsmith/django-pipeline-browserify/issues/14). Но даже после этого патча, к сожалению, эта ошибка компиляции. Хотя команда теперь выглядит ОК: если я выполняюИспользование протокола Django для браузера в Windows
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. Когда же команда выполняется как подпроцесс Джанго/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
...
Некоторые параметры (BTW 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"]
(! Последний был нужен для составителей) Мои система: Win 10, Python 2.7, Django 1.8
Скажи мне, что еще я должен указать
Update: сообщение об ошибке исходит от самого узла. См. Стек вызовов ниже. Обратите внимание, что здесь я попытался явно указать файл преобразования 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),
)
«вызвать код компилятор трубопровода ожидает кортежи. Постепенно он исходный код он получил одну полной строку, а затем рассекает его отдельные персонаж, полагая, что все они являются аргументами, см 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
Я следую тот же учебник и, похоже, не может заставить коллекцию работать. Я получаю следующую ошибку: «django/contrib/staticfiles/management/commands/collectstatic.py», строка 122, в наборе для исходного_path, обработанного_процесса, обработанного в процессоре: Файл «pipe/storage.py», строка 24 в post_process output_file = package.output_filename Файл "трубопровод/packager.py", строка 44, в выходной_файл возвратного self.config.get ('выходной_файл') AttributeError: 'кортеж' объект не имеет атрибута 'получить'. Хотите узнать, есть ли у вас подобная ошибка? – Rads
@Rads, который не звонит в колокольчик. Я подозреваю, что ваша конфигурация трубопровода неисправна. Это (когда вы поставляете кортеж или не получаете кортеж, если ожидается) может быть причиной даже отсутствием запятой или дополнительной запятой. Это скорее похоже на дополнительную запятую где-то. Отправьте свою конфигурацию в вопрос и поставьте ссылку здесь, чтобы я мог следовать ей. Или просто поместите его в Gist и сообщите ссылку. –
@Rads В вашем случае участвует 'browserify' или у вас есть только' конвейер'? У меня уже есть конфигурация рабочего конвейера, когда я ввел 'browserify' в уравнение. –