Django, Docker, SlickGrid - Невозможно пройтись по графу зависимостей: Cannot find module 'slickgrid'
Я пытаюсь собрать приложение на основе бэкенда Django на Docker, используя PyCharm с NPM и slickgrid.
Когда в каком-нибудь .js-файле пытаешься импортировать slickgrid:
import { SlickGrid, SlickDataView } from 'slickgrid';
Я получаю ошибку Django:
Ошибка фильтра в /todo/ Ошибка: Can't walk dependency graph: Cannot find module 'slickgrid' from '/opt/project/eTools/todo/static/todo/js/main.js'
Для работы со статическими активами Django я использую: django-compressor django-compressor-toolkit
В Dockerfile у меня есть что-то вроде:
`
Установить рабочий каталог
WORKDIR /code (...) RUN apt-get install -y nodejs npm (...) #Slickgrid RUN npm install -g browserify babelify@8 babel-core babel-preset-env babel-cli babel-preset-es2015 RUN npm install -g slickgrid (...)
Скопируйте проект Django
COPY ./eTools/ /code/ `
Похоже, что npm, косвенно используемый Django, не видит 'slickgrid'.
В bash для Docker я вижу следующее: a) в месте, куда приложение было скопировано на последнем шаге Dockerfile (место /code/), в npm есть slickgrid: root@f7401a6daac5:/code# npm list slickgrid code@ /code └── slickgrid@5.8.2 b) но по непонятной причине (по крайней мере, для меня ;)) npm, похоже, вызывается из локации из исключения ('/opt/project/'). проверил в docker bash и там нет 'slickgrid':
root@f7401a6daac5:/opt/project# npm list slickgrid eTools_root@1.0.0 /opt/project └── (пусто)
Посоветуйте, пожалуйста, как я могу решить эту проблему? И почему код вызывается из другого места, а не из /code? Связано ли это с PyCharm?
Часть настроек Django, связанных с компрессией и статикой:
`STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'eTools', 'static'),
os.path.join(BASE_DIR, 'todo', 'static'),
os.path.join(BASE_DIR, 'clients', 'static'),
'node_modules', os.path.join(BASE_DIR, 'node_modules/'),
#os.path.join(BASE_DIR, 'static', 'js'), #Add global js directory
]
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
'compressor.finders.CompressorFinder',
)
COMPRESS_CSS_FILTERS = [
'compressor.filters.css_default.CssAbsoluteFilter',
'compressor.filters.cssmin.CSSMinFilter',
'compressor.filters.template.TemplateFilter',
BASE_DIR / 'static',
]
COMPRESS_JS_FILTERS = [
'compressor.filters.jsmin.JSMinFilter',
]
COMPRESS_PRECOMPILERS = (
('module', 'compressor_toolkit.precompilers.ES6Compiler'),
('css', 'compressor_toolkit.precompilers.SCSSCompiler'),
)
COMPRESS_ENABLED = True
COMPRESS_LOCAL_NPM_INSTALL = False
COMPRESS_NODE_MODULES = '/usr/local/lib/node_modules'`
Спасибо!
Я пытался следовать нескольким руководствам и, возможно, смешал некоторые настройки?