通过JsPyBridge使用PostCSS+TailwindCSS报错:TypeError问题求助
解决JsPyBridge调用postcss.then()时的TypeError问题
问题分析
你的Node.js代码能正常运行,但Python调用then()时报错TypeError: 'NoneType' object is not callable,核心原因是JsPyBridge对JS Promise的then()方法处理逻辑和原生JS不同,Python的lambda函数无法直接作为JS Promise的回调被正确识别,同时JS与Python的异步处理逻辑差异也可能引发该问题。
解决方案
方案1:使用JsPyBridge异步语法(推荐)
JsPyBridge支持Python的async/await语法处理JS Promise,替代then()回调的方式:
from javascript import require, asyncio tailwind = require("tailwindcss") postcss = require("postcss") async def process_css(): result = await postcss([tailwind({"content": [DIR + "../app/**/*.*"]})]).process( _input_css, {"from": None} ) print(result.css) asyncio.run(process_css())
方案2:用原生JS函数作为回调
如果坚持使用then(),可以通过JSFunction创建原生JS回调函数,规避Python lambda的兼容性问题:
from javascript import require, JSFunction tailwind = require("tailwindcss") postcss = require("postcss") # 创建原生JS回调 js_callback = JSFunction("css", "console.log(css.css);") postcss([tailwind({"content": [DIR + "../app/**/*.*"]})]).process( _input_css, {"from": None} ).then(js_callback)
额外检查项
- 确认
DIR变量的路径拼接结果和Node.js中path.join(__dirname, "../app/**/*.*")一致,避免路径错误导致postcss处理异常 - 确保JsPyBridge为最新版本,旧版本可能存在Promise处理的兼容性bug
内容的提问来源于stack exchange,提问作者Stellar Mouse
相关产品推荐
相关产品推荐

