node.js - Gatsby - 无法解析 'path' 中的 'C:\Users\...\gatsby-starter-hello-world\node_modules\postcss\lib'

标签 node.js path gatsby node-modules

我正在尝试使用 sanitize-html@types/sanitize-html 一起打包对于 typescript ,但会导致以下错误-

ERROR in ./node_modules/postcss/lib/input.js 4:30-45
Module not found: Error: Can't resolve 'path' in 'C:\Users\sapin\Desktop\gatsby-starter-hello-world\node_modules\postcss\lib'

BREAKING CHANGE: webpack < 5 used to include polyfills for node.js core modules by default.
This is no longer the case. Verify if you need this module and configure a polyfill for it.

If you want to include a polyfill, you need to:
        - add a fallback 'resolve.fallback: { "path": require.resolve("path-browserify") }'
        - install 'path-browserify'
If you don't want to include a polyfill, you can use an empty module like this:
        resolve.fallback: { "path": false }
 @ ./node_modules/postcss/lib/postcss.js 14:12-30
 @ ./node_modules/sanitize-html/index.js 7:32-50
 @ ./src/states/BlogsProvider.tsx 12:0-37 103:15-23 104:21-29 105:14-22
 @ ./src/pages/bookmarks.tsx 10:0-51 18:24-32 61:10-18
 @ ./.cache/_this_is_virtual_fs_path_/$virtual/async-requires.js 36:11-38:5
 @ ./.cache/app.js 17:0-52 28:0-70 30:27-40 28:0-70
我如果这样做 npm i path ,构建时间错误消失;但这会导致运行时错误-
Uncaught ReferenceError: process is not defined
    at eval (path.js:25)
    at Object../node_modules/path/path.js (commons.js:2976)
    at Object.options.factory (commons.js:4478)
    at __webpack_require__ (commons.js:3881)
    at fn (commons.js:4159)
    at eval (map-generator.js:3)
    at Object../node_modules/postcss/lib/map-generator.js (commons.js:3096)
    at Object.options.factory (commons.js:4478)
    at __webpack_require__ (commons.js:3881)
    at fn (commons.js:4159)
跟踪错误行,正是这一行引发了错误-
var isWindows = process.platform === 'win32';
所以简而言之 , sanitize-html包无法识别 path没有明确安装它。安装后,path模块无法识别 process .我怎样才能解决这个问题?
如果没有,是否有任何支持 typescript 的替代 sanitizer 包?

最佳答案

该问题已在 v8.2.7 中修复。 , 根据 this comment在 GitHub 上。这似乎与 webpack has removed polyfills in their new v5 version 的事实有关。 ,这是 postcss 所需的依赖项, sanitize-html 也使用它.
但是,如果问题仍然存在,应该通过安装 path-browserify 来解决。 (通过 npm i path-browserify )并在您的 gatsby-node.js 中将以下后备添加到 webpack 的覆盖配置中, onCreateWebpackConfig API应该可以工作:

exports.onCreateWebpackConfig = ({ actions }) => {
  actions.setWebpackConfig({
   resolve: {
      fallback: {
        path: require.resolve('path-browserify'),
      },
    },
  })
}
来源:修改自https://github.com/postcss/postcss/issues/1509#issuecomment-772097567
我根据提示的错误回答:
BREAKING CHANGE: webpack < 5 used to include polyfills for node.js core modules by default.
This is no longer the case. Verify if you need this module and configure a polyfill for it.

If you want to include a polyfill, you need to:
        - add a fallback 'resolve.fallback: { "path": require.resolve("path-browserify") }'
        - install 'path-browserify'

关于node.js - Gatsby - 无法解析 'path' 中的 'C:\Users\...\gatsby-starter-hello-world\node_modules\postcss\lib',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67075747/

相关文章:

javascript - 如何在 Node.js 中查找文件的大小?

javascript - Node.js 中的动态路由

c - 如何在 Windows 中设置 Turbo C 路径?

css - 为什么背景图片加载不出来?

png - 图像(PNG 或 WebP)突然变成黑色背景而不是透明

javascript - 是否可以使用nodejs/npm启动具有不同权限的js文件?

javascript - Nodejs 集群中从工作人员到工作人员的消息

java - Ant build.xml 文件无法使用 fileset 元素中的属性

javascript - svg 折线的 svg 路径

reactjs - 使用 Maps JavaScript API 将 Google map 添加到 GatsbyJS