【问题标题】:How to bundle node module CSS into a vscode extension如何将节点模块 CSS 捆绑到 vscode 扩展中
【发布时间】:2021-10-26 16:45:21
【问题描述】:

我的 Visual Studio Code 扩展使用节点模块 highlight.js,它带有一个充满 CSS 文件的文件夹。这些为语法着色提供了配色方案。有必要捆绑一些 CSS 文件。

这是关于捆绑资产

目标是捆绑一个 CSS 文件并在运行时以字符串形式访问文件内容。如果可以在没有导入语句的情况下实现,那将是完美的。通常,如何访问捆绑文件的内容将是一个单独的问题,但我觉得内容检索和应该如何捆绑资产密切相关。

我坦率地承认对 WebPack 的了解很薄弱。

到目前为止的故事

捆绑器在package.json 中指定为"webpack": "^5.4.0",但我不知道如何确定实际存在的内容。可以想象我的设置有问题:当我尝试在项目文件夹中的命令提示符下运行webpack --version 时,它会响应

CLI for webpack must be installed.
  webpack-cli (https://github.com/webpack/webpack-cli)

We will use "npm" to install the CLI via "npm install -D webpack-cli".
Do you want to install 'webpack-cli' (yes/no):

第一次发生这种情况时,我回答是。经过一阵安装和另一次尝试,同样的事情发生了。但是,vsce package 使用 webpack 进行生产构建并按下 F5 调试成功将开发构建放在 dist 文件夹中,并带有一个我可以检查的未压缩文件(这就是我知道下面提到的文件的方式)正在捆绑中)。

从那里继续我已经修改了webpack.config.js 像这样

//@ts-check

'use strict';

const path = require('path');

/**@type {import('webpack').Configuration}*/
const config = {
  target: 'node', // vscode extensions run in a Node.js-context -> https://webpack.js.org/configuration/node/

  entry: './src/extension.ts', // the entry point of this extension, -> https://webpack.js.org/configuration/entry-context/
  output: {
    // the bundle is stored in the 'dist' folder (check package.json), -> https://webpack.js.org/configuration/output/
    path: path.resolve(__dirname, 'dist'),
    filename: 'extension.js',
    libraryTarget: 'commonjs2',
    devtoolModuleFilenameTemplate: '../[resource-path]'
  },
  devtool: 'source-map',
  externals: {
    vscode: 'commonjs vscode' // the vscode-module is created on-the-fly and must be excluded. Add other modules that cannot be webpack'ed, -> https://webpack.js.org/configuration/externals/
  },
  resolve: {
    // support reading TypeScript and JavaScript files, -> https://github.com/TypeStrong/ts-loader
    extensions: ['.ts', '.js', '.css']
  },
  module: {
    rules: [
      {
        test: /\.ts$/,
        exclude: /node_modules/,
        use: [
          {
            loader: 'ts-loader'
          }
        ]
      },
      {
        test: /\.css$/,
        use: [
          'style-loader',
          'css-loader'
        ]
      }
    ]
  }
};
module.exports = config;

如您所见,CSS 有规则和加载器。

当我添加这个导入时

import "../node_modules/highlight.js/styles/atelier-dune-light.css";

webpack 愉快地构建了包,当我检查它时,我可以找到捆绑的 CSS。

但是,当我尝试在扩展调试主机中加载扩展时,它无法加载,并显示此消息。

激活扩展“pdconsec.vscode-print”失败:文档未定义。

对捕获的异常启用中断会显示这个相当令人惊讶的异常。

Exception has occurred: Error: Cannot find module 'supports-color'
Require stack:
- c:\Users\Peter\AppData\Local\Programs\Microsoft VS Code\resources\app\node_modules.asar\get-uri\node_modules\debug\src\node.js
- c:\Users\Peter\AppData\Local\Programs\Microsoft VS Code\resources\app\node_modules.asar\get-uri\node_modules\debug\src\index.js
- c:\Users\Peter\AppData\Local\Programs\Microsoft VS Code\resources\app\node_modules.asar\get-uri\dist\index.js
- c:\Users\Peter\AppData\Local\Programs\Microsoft VS Code\resources\app\node_modules.asar\vscode-proxy-agent\out\agent.js
- c:\Users\Peter\AppData\Local\Programs\Microsoft VS Code\resources\app\node_modules.asar\vscode-proxy-agent\out\index.js
- c:\Users\Peter\AppData\Local\Programs\Microsoft VS Code\resources\app\out\bootstrap-amd.js
- c:\Users\Peter\AppData\Local\Programs\Microsoft VS Code\resources\app\out\bootstrap-fork.js

好的,所以激活失败,因为加载器被吐了。但是 WTF 导入 CSS 和 support-color 有关系吗?

删除导入,它运行得很好。我真的不知道如何回应这个;我不清楚为什么对样式表的需求会导致该错误。在这一点上,我向其他人寻求指导和建议。

【问题讨论】:

  • 你看过this issue上的建议了吗?
  • 您寄予厚望,但实际上我是从他们建议的设置开始的。加载程序错误阻止我的扩展程序启动。就是说,谢谢 - 我要补充这个问题。

标签: node.js typescript webpack vscode-extensions


【解决方案1】:

webpack.config.js 中删除style-loader 以修复错误。

像这样将 CSS 拉成字符串。请注意缩写路径。

const cssPath: string = "highlight.js/styles/atelier-dune-light.css";
const theCss: string = require(cssPath).default.toString();

你不需要import 语句,使用require 会导致Webpack 打包文件,但你仍然需要删除style-loader 以避免加载器错误。

【讨论】:

    猜你喜欢
    • 2022-01-03
    • 2022-12-23
    • 1970-01-01
    • 2016-10-13
    • 1970-01-01
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多