Использование Firebase, компонентов дизайна материалов (MDC) и Node.js

Обзор

Я работаю над веб-сайтом (многостраничным) для друга, и я решил использовать компоненты дизайна материалов Google (MDC) для Интернета в качестве основы его стиля. Я бы хотел, чтобы он размещался на Firebase с использованием функций и хостинга.

Я работал над этим чуть больше недели и дошел до того, что могу использовать Node.js, Express и EJS для рендеринга нескольких страниц, но я не могу понять, как MDC станет функциональным в этой среде.


Вопрос

Вы видели эту работу раньше? Если да, то как это было сделано и с чего мне начать?


Примечание

Мне удалось запустить его локально, используя этот вопрос. Вот основные файлы, благодаря которым это работает:

webpack.config.js

module.exports = [{
entry: './app.scss',
output: {
    // This is necessary for webpack to compile
    // But we never use style-bundle.js
    filename: 'style-bundle.js',
},
module: {
    rules: [{
        test: /\.scss$/,
        use: [
            {
                loader: 'file-loader',
                options: {
                    name: 'bundle.css',
                },
            },
            { loader: 'extract-loader' },
            { loader: 'css-loader' },
            {
                loader: 'sass-loader',
                options: {
                    includePaths: ['./node_modules']
                }
            },
        ]
    }]
},
}];

index.html

<html>
<head>
    <link rel="stylesheet" href="bundle.css">
</head>
<body>
    <button class="foo-button mdc-button">
        Button
    </button>
</body>
</html>

package.json

{
  "name": "functions",
  "description": "Cloud Functions for Firebase",
  "scripts": {
    "lint": "eslint .",
    "serve": "firebase serve --only functions",
    "shell": "firebase functions:shell",
    "start": "webpack-dev-server",
    "deploy": "firebase deploy --only functions",
    "logs": "firebase functions:log"
  },
  "dependencies": {
    "@material/button": "^0.36.0",
    "firebase-admin": "~5.12.1",
    "firebase-functions": "^1.0.3"
  },
  "devDependencies": {
    "css-loader": "^0.28.11",
    "eslint": "^4.12.0",
    "eslint-plugin-promise": "^3.6.0",
    "extract-loader": "^2.0.1",
    "file-loader": "^1.1.11",
    "node-sass": "^4.9.0",
    "sass-loader": "^7.0.3",
    "webpack": "^3.12.0",
    "webpack-dev-server": "^2.11.2"
  },
  "private": true
}

app.scss

@import "@material/button/mdc-button";

.foo-button {
  @include mdc-button-ink-color(teal);
  @include mdc-states(teal);
}

person Jacob Brokaw    schedule 14.06.2018    source источник
comment
Это довольно расплывчатое описание. Есть ли у вас конкретная проблема?   -  person Doug Stevenson    schedule 14.06.2018
comment
Приношу свои извинения, теперь я поясню.   -  person Jacob Brokaw    schedule 14.06.2018
comment
@DougStevenson Я переформатировал вопрос.   -  person Jacob Brokaw    schedule 14.06.2018
comment
Я все еще не понимаю, о чем вы спрашиваете. Разве это не просто JS и стиль?   -  person Dave Newton    schedule 15.06.2018
comment
К сожалению, не в случае хостинга на Firebase. Я обратился к их сообществу Slack и нашел полезный ответ. Вместо этого я собираюсь использовать React - в MDC есть конфигурация проекта React, которую вы можете использовать. github.com/material-components/material-components-web-react   -  person Jacob Brokaw    schedule 18.06.2018


Ответы (1)


Член Firebase Slack смог указать мне правильное направление, поэтому мне больше не нужна помощь. Предоставляется ссылка на скриншот того, что они предложили.

Ответ Сэма Джексона

По сути, я собираюсь использовать React вместо обычного Node.js. Похоже, они разработали версию MDC для React, которую вы можете настроить при создании проекта React.

MDC React GitHub

person Jacob Brokaw    schedule 18.06.2018
comment
Похоже, конфликт все еще существует. Кажется, что MDC требует, чтобы сервер запускался с webpack-dev-server (команда npm start, по сути, выполняет это). Однако при выполнении локального тестирования с хостингом Firebase в примере кода говорится, что нужно запустить firebase serve --only hosting. Как вы разрешили конфликт? - person Michael Osofsky; 13.10.2019
comment
Ответ на мой вопрос может быть stackoverflow.com/a/39554878/2848676, где в основном говорится, что вы не используете webpack-dev-server . Вместо этого вы по существу вызываете webpack (через npm run build), который помещает все файлы в место, которое firebase serve и firebase deploy умеют искать. Firebase знает, что нужно искать по конфигурации в firebase.json. - person Michael Osofsky; 13.10.2019