Реактивный электрон не применяется CSS в процессе рендеринга - PullRequest
0 голосов
/ 02 мая 2020

Я работаю над проектом с использованием React, Electron и Typescript и застрял в середине процесса распространения, потому что я не могу правильно включить CSS. Я использую electron-rebuild и webpack для комплектации и сборки.

webpack.config. js

const HtmlWebpackPlugin = require('html-webpack-plugin')

module.exports = [
  {
    node: {
      __dirname: false,
    },
    mode: 'development',
    entry: './src/electron.ts',
    target: 'electron-main',
    devtool: 'source-map',
    module: {
      rules: [
        {
          test: /\.ts$/,
          include: /src/,
          use: [{ loader: 'ts-loader' }],
        },
      ],
    },
    output: {
      path: __dirname + '/build',
      filename: 'electron.js',
    },
    externals: {
      knex: 'commonjs knex',
      // sqlite3: 'commonjs sqlite3'
    },
  },
  {
    mode: 'development',
    entry: './src/react.tsx',
    target: 'electron-renderer',
    devtool: 'source-map',
    module: {
      rules: [
        {
          test: /\.ts(x?)$/,
          include: /src/,
          use: [{ loader: 'ts-loader' }],
        },
        {
          test: /\.css$/,
          include: [/src/, /node_modules/],
          use: [
            'css-loader',
          ],
        },
      ],
    },
    output: {
      path: __dirname + '/build',
      filename: 'react.js',
    },
    plugins: [
      new HtmlWebpackPlugin({
        template: './src/index.html',
      }),
    ],
    resolve: {
      extensions: ['.ts', '.tsx', '.js', '.jsx'],
    },
  },
]

Используя эти настройки, я создаю electron.js для основного процесса и react.js для процесса визуализации. В компоненте TableView я использую import ....css следующим образом:

TableView.tsx

import '@ag-grid-community/all-modules/dist/styles/ag-grid.css'
import '@ag-grid-community/all-modules/dist/styles/ag-theme-balham.css'
import './styles.css'

const TableView: React.FC<ITableViewProps> = ({ ... }) => {
...
}
...

и в сгенерированном файле react.js я могу найти следующую часть, поэтому я думаю, что он содержит содержимое CSS файлов.

var react_1 = __importStar(__webpack_require__(/*! react */ "./node_modules/react/index.js"));
__webpack_require__(/*! @ag-grid-community/all-modules/dist/styles/ag-grid.css */ "./node_modules/@ag-grid-community/all-modules/dist/styles/ag-grid.css");
__webpack_require__(/*! @ag-grid-community/all-modules/dist/styles/ag-theme-balham.css */ "./node_modules/@ag-grid-community/all-modules/dist/styles/ag-theme-balham.css");
__webpack_require__(/*! ./styles.css */ "./src/Views/styles.css");
...

/***/ "./src/Views/styles.css":
/*!******************************!*\
  !*** ./src/Views/styles.css ***!
  \******************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

// Imports
var ___CSS_LOADER_API_IMPORT___ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js");
exports = ___CSS_LOADER_API_IMPORT___(false);
// Module
exports.push([module.i, ".recommended {\r\n  background-color: yellow !important;\r\n}\r\n", ""]);
// Exports
module.exports = exports;


/***/ }),

И файл index.html в каталоге build содержит <script type="text/javascript" src="react.js"></script>, поэтому я ожидал, что он будет работать без добавления тегов <link> для файлов css. Но это работает не так, как я ожидал, и когда я добавляю тег <link> в файл index.html дополнительно, он работает. Однако, когда я пытаюсь собрать приложение в рабочем режиме, этот трюк не работает, потому что файл asar не включает эти CSS файлы, хотя я оставляю теги <link>. Итак, я хочу исправить это, заставив работать так, как это должно быть, когда я делаю react.js с вышеуказанными настройками веб-пакета. Кто-нибудь сталкивался с этой проблемой? Я уже гуглил и нашел некоторые решения, но у меня ничего не получалось.

{
  "name": "0207",
  "version": "1.0.0",
  "description": "",
  "main": "./build/electron.js",
  "scripts": {
    "start": "npm run build && electron ./build/electron.js",
    "build": "npm run rebuild && webpack --config ./webpack.config.js",
    "rebuild": "electron-rebuild -f -w sqlite3",
    "execute": "electron ./build/electron.js",
    "pack": "npm run build && electron-builder --dir",
    "dist": "npm run build && electron-builder",
    "postinstall": "electron-builder install-app-deps"
  },
  "build": {
    "appId": "app-win32-x64",
    "asar": false,
    "files": [
      "./build/**/*",
      "./node_modules/**/*"
    ],
    "electronDownload": {
      "cache": "./"
    }
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "@types/knex": "^0.16.1",
    "@types/node": "^13.13.4",
    "@types/prop-types": "^15.7.3",
    "@types/qs": "^6.9.1",
    "@types/react": "^16.9.19",
    "@types/react-dom": "^16.9.5",
    "@types/react-redux": "^7.1.7",
    "@types/react-router": "^5.1.4",
    "@types/react-router-dom": "^5.1.3",
    "@types/sequelize": "^4.28.8",
    "@types/sqlite3": "^3.1.6",
    "concurrently": "^5.1.0",
    "css-loader": "^3.4.2",
    "electron": "^8.2.5",
    "electron-builder": "^22.6.0",
    "electron-devtools-installer": "^2.2.4",
    "electron-is-dev": "^1.1.0",
    "electron-prebuilt-compile": "8.2.0",
    "electron-rebuild": "^1.10.1",
    "html-webpack-plugin": "^3.2.0",
    "style-loader": "^1.1.3",
    "ts-loader": "^6.2.1",
    "typescript": "^3.7.5",
    "typings-for-css-modules-loader": "^1.7.0",
    "wait-on": "^4.0.0"
  },
  "dependencies": {
    "@ag-grid-community/all-modules": "^22.1.1",
    "@ant-design/icons": "^4.1.0",
    "ag-grid-community": "^23.0.2",
    "ag-grid-react": "^23.0.3",
    "antd": "^4.1.5",
    "async-csv": "^2.1.3",
    "axios": "^0.19.2",
    "csv-parser": "^2.3.2",
    "csv-writer": "^1.6.0",
    "electron-better-ipc": "^1.0.0",
    "electron-promise-ipc": "^2.1.0",
    "electron-squirrel-startup": "^1.0.0",
    "electron-window-manager": "^1.0.6",
    "knex": "^0.21.1",
    "node-abi": "^2.16.0",
    "prop-types": "^15.7.2",
    "qs": "^6.9.3",
    "react": "^16.13.1",
    "react-dom": "^16.13.1",
    "react-redux": "^7.2.0",
    "react-router": "^5.1.2",
    "react-router-dom": "^5.1.2",
    "redux": "^4.0.5",
    "redux-actions": "^2.6.5",
    "redux-devtools-extension": "^2.13.8",
    "redux-logger": "^3.0.6",
    "redux-thunk": "^2.3.0",
    "redux-undo": "^1.0.1",
    "sqlite3": "^4.1.1",
    "string-similarity": "^4.0.1",
    "typesafe-actions": "^5.1.0",
    "webpack": "^4.43.0",
    "webpack-cli": "^3.3.11",
    "xlsx": "^0.15.5"
  },

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...