Webpacker не может найти некоторые node_modules в настройке Docker / Rails - PullRequest
6 голосов
/ 29 февраля 2020

У меня новый экземпляр Rails 5.2.4.1, созданный с --webpack=stimulus. Dockerized все это. С помощью стимула js проблем нет - import { Application } from "stimulus" работает так, как должно.

Затем я добавил турболинки с yarn add turbolinks, а затем import Turbolinks from "turbolinks", как описано в github README (не имеет значения, если я использую import или require). В результате возникает ошибка 'Failed to compile.' . Как-то не может найти модуль. У меня та же проблема, например, с другим пакетом, называемым «isotope-layout».

Вот журнал ошибок: Gist

Когда я ls node_modules на веб-пакере * В контейнере 1058 * находятся папки с турболинками и изотопами.

❯ docker-compose run webpacker bash

bash-5.0$ pwd
/home/deploy/app

bash-5.0$ ls node_modules/turbolinks/
CHANGELOG.md  README.md     package.json
LICENSE       dist          src

РЕДАКТИРОВАТЬ: после запуска docker-compose down --remove-orphans турболинки и другие модули в node_modules найдены, и он компилирует ... кеш проблема?

Вот мои текущие файлы конфигурации Webpacker и Docker:

Dockerfile:

FROM ruby:2.6.5-alpine
RUN apk update && \
    apk upgrade && \
    apk add --update \
    build-base \
    nodejs \
    nodejs-npm \
    mysql-dev \
    curl \
    imagemagick \
    tzdata \
    yarn \
    bash && \
    rm -rf /var/cache/apk/*

RUN addgroup -S admin -g 1000 && adduser -S -g '' -u 1000 -G admin deploy

ENV RAILS_ROOT /home/deploy/app
ENV RAILS_LOG_TO_STDOUT 1
ENV NPM_CONFIG_PREFIX=/home/deploy/.npm-global
ENV PATH=$PATH:/home/deploy/.npm-global/bin

COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]

USER deploy
RUN mkdir -p $RAILS_ROOT
WORKDIR $RAILS_ROOT
COPY --chown=deploy:admin Gemfile Gemfile.lock ./
RUN npm install -g yarn
RUN bundle install --jobs 20 --retry 5 --binstubs
COPY --chown=deploy:admin . ./
RUN yarn install --pure-lockfile

точка входа. sh:

#!/bin/bash
set -e
rm -f /home/deploy/app/tmp/pids/server.pid
exec "$@"

docker -compose.yml:

version: '3'

services:
  webpacker:
    build:
      dockerfile: Dockerfile
      context: .
    volumes:
      - .:/home/deploy/app
      - /home/deploy/app/bin
      - /home/deploy/app/node_modules
    command: bash -c 'rm -rf /home/deploy/app/public/packs; /home/deploy/app/bin/webpack-dev-server'
    ports:
      - '3035:3035'

  app:
    build:
      dockerfile: Dockerfile
      context: .
    command: >
      bash -c "
        rm -f tmp/pids/server.pid &&

        # Run test server detached
        RAILS_ENV=test puma -b tcp://0.0.0.0:3001 -d &&

        # Run web server
        puma -C config/puma.rb
        "
    ports: ['3000:3000', '3001:3001']
    environment:
      - RAILS_ENV=development
      - NODE_ENV=development
    depends_on:
      - webpacker
    volumes:
      - .:/home/deploy/app
      - /home/deploy/app/bin
      - /home/deploy/app/node_modules

webpacker.yml:

default: &default
  source_path: app/webpacker
  source_entry_path: packs
  public_root_path: public
  public_output_path: packs
  cache_path: tmp/cache/webpacker
  check_yarn_integrity: false
  webpack_compile_output: false

  # Additional paths webpack should lookup modules
  # ['app/assets', 'engine/foo/app/assets']
  resolved_paths: []

  # Reload manifest.json on all requests so we reload latest compiled packs
  cache_manifest: false

  # Extract and emit a css file
  extract_css: true

  static_assets_extensions:
    - .jpg
    - .jpeg
    - .png
    - .gif
    - .tiff
    - .ico
    - .svg
    - .eot
    - .otf
    - .ttf
    - .woff
    - .woff2

  extensions:
    - .mjs
    - .js
    - .sass
    - .scss
    - .css
    - .module.sass
    - .module.scss
    - .module.css
    - .png
    - .svg
    - .gif
    - .jpeg
    - .jpg

development:
  <<: *default
  compile: true

  # Verifies that correct packages and versions are installed by inspecting package.json, yarn.lock, and node_modules
  check_yarn_integrity: false

  # Reference: https://webpack.js.org/configuration/dev-server/
  dev_server:
    https: false
    host: webpacker
    port: 3035
    public: 0.0.0.0:3035
    hmr: false
    # Inline should be set to true if using HMR
    inline: true
    overlay: true
    compress: true
    disable_host_check: true
    use_local_ip: false
    quiet: false
    pretty: false
    headers:
      'Access-Control-Allow-Origin': '*'
    watch_options:
      aggregate_timeout: 300,
      poll: 1000,
      ignored: '**/node_modules/**'


test:
  <<: *default
  compile: true

  # Compile test packs to a separate directory
  public_output_path: packs-test

production:
  <<: *default

  # Production depends on precompilation of packs prior to booting for performance.
  compile: false

  # Extract and emit a css file
  extract_css: true

  # Cache manifest.json for performance
  cache_manifest: true

webpack / environment. js:

const { environment } = require('@rails/webpacker')

module.exports = environment

приложение. js:

import Turbolinks from "turbolinks"

1 Ответ

0 голосов
/ 09 марта 2020

После запуска yarn add turbolinks (или любого yard add ..) следует остановить службу веб-упаковщика и запустить ее снова.

Потому что после запуска docker-compose down --remove-orphans все работает хорошо. Вы удаляете все сервисы и создаете их снова. Просто остановись и начни быстрее.

...