Lui*_*iso 3 javascript node.js yeoman yeoman-generator
我正在尝试创建 yeoman 生成器,但无法开始。我正在关注这个主题的视频,但我什至无法运行我的代码。
这是我的package.json文件:
{
"name": "generator-test",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"yeoman-generator": "^7.1.0"
}
}
Run Code Online (Sandbox Code Playgroud)
和我的index.js文件:
const Generator = require("yeoman-generator");
module.exports = class extends Generator {
initializing() {
this.log("working!");
}
};
Run Code Online (Sandbox Code Playgroud)
我可以运行npm link没有任何问题,当我尝试运行它时,我可以看到它已被击中,但随后我收到此错误:
不支持来自 ...\generator-test\generators\app\index.js 的 ES 模块 ...\generator-test\node_modules\yeoman-generator\dist\index.js 的 require() 。
而是将 ...\generator-test\generators\app\index.js 中的 ...\generator-test\node_modules\yeoman-generator\dist\index.js 的需求更改为动态 import() ,可在所有 CommonJS 模块。
所以我尝试了一下,结果是这样的index.js:
import Generator from "yeoman-generator";
module.exports = class extends Generator {
initializing() {
this.log("working!");
}
};
Run Code Online (Sandbox Code Playgroud)
和这个错误:
不能在模块外部使用 import 语句
我确信我做错了什么,我只是不知道它是什么。有人能指出我正确的方向吗?
首先,您选择的 yeoman 版本作为 ES 模块发布,这意味着它不能与require.
其次,你的项目被定义为CJS,因为你的package.json没有定义"type": "module",所以默认为普通JS。
如果您想继续在项目中使用 CJS,那么要使用 yeoman,您需要使用在 ESM 和 CJS 上下文中都可用的动态表达式。 import()走这条路,您可能应该使用顶级等待来定义您的index.js模块,因为动态导入使用承诺。沿着这些思路:
const setup = async () => {
const Generator = await import('yeoman-generator')
return class extends Generator {
initializing() {
this.log("working!");
}
}
}
export default await setup()
Run Code Online (Sandbox Code Playgroud)
更简单的选项是通过"type": "module"在 package.json 文件中进行设置并将调用更改require为import.
import Generator from "yeoman-generator";
export default class extends Generator {
initializing() {
this.log("working!")
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
266 次 |
| 最近记录: |