在我的第一个npm脚本开发的早期,有些挣扎。我正在使用最新的nvm,node,npm和pnpm版本的Ubuntu LTS。
已使用nvm安装了Node + npm,使用npm安装了pnpm,并使用pnpm在本地安装了几个模块(即,没有-g标志)。不需要sudo。产生的package.json:
{
"name": "javascript-development-environment",
"version": "1.0.0",
"description": "JavaScript development environment cobbled together using various online sources",
"scripts": {
"prestart": "./node_modules/.bin/babel buildScripts/startMessage.js",
"start": "./node_modules/.bin/babel buildScripts/srcServer.js"
},
"author": "Laird o' the Windy Waas",
"license": "MIT",
"dependencies": {
"@babel/polyfill": "^7.0.0"
},
"devDependencies": {
"@babel/cli": "^7.1.5",
"@babel/core": "^7.1.6",
"@babel/preset-env": "^7.1.6",
"chalk": "^2.4.1",
"express": "^4.16.4",
"open": "^0.0.5",
"path": "^0.12.7"
}
}
仅安装Firefox 60.0.1,然后使用 node 进行“ pnpm start”,打开浏览器窗口“ Hello World!”。 ,然后必须使用CTRL-C重新获得终端控制。 ->好的。
如果我使用上面显示的路径替换babel (这是由this post中描述的相同问题导致的),则buildScripts代码将回显到终端,但没有浏览器窗口打开,并在完成后立即释放终端控制。 npm调试器没有提供有用的反馈。 ->无法正常工作。.
作为“ Hello World!”使用node正确遍历了代码(对于babel遍历来说,它保持不变),这不是问题的根源。
这是我的babel配置文件:
.babelrc
{
"presets": [
"@babel/preset-env"
]
}
babel.config.js
const presets = [
[
"@babel/env",
{
targets: {
edge: "17",
firefox: "61",
chrome: "67",
safari: "11.1",
opera: "56"
},
useBuiltIns: "usage"
},
],
];
module.exports = { presets };
问题似乎是babel没有将已转码的代码传递给nodejs / express。一定很简单,但我只是转圈。。
我发现自己想问的一件事是.babelrc
,babel.config.js
和package.json
上的各种环境预设之间是否存在冲突。 .babelrc
和babel.config.js
文件的连续存放没有带来任何改变/提前。
我还注意到当前同时安装了(nvms)节点和(ubuntus)nodejs:
$ which node
/home/<myusername>/.nvm/versions/node/v10.13.0/bin/node
$ which nodejs
/usr/bin/nodejs
但是,与节点和npm有关的所有操作都是使用nvm安装的,因此此shouldn't be a problem。
我想我可以尝试installing babel globally,但是有了这个皱着眉头的啤酒。我希望有一个反映“最佳实践”的解决方案。
谢谢您的建议。
答案 0 :(得分:1)
在较早的几年中,辅导材料建议babel-node
代表用户开始npm
/ node
(因此也express
)开始。
babel-node
现在似乎不再被识别。尝试使用babel-node
命令失败,仅在其位置使用node会导致将Transpiler输出转储到终端。
babel
(在我们的示例中为pnpm
和node
,后者引用已转译的代码。 node
似乎可以处理与express
的接口。
因此,在进行一些实验之后,以下更改(在package.json
中似乎可以正常工作:
"scripts": {
"prestart": "./node_modules/.bin/babel buildScripts/startMessage.js -d dist",
"build": "./node_modules/.bin/babel buildScripts/srcServer.js -d dist",
"start": "pnpm run build && node dist/startMessage.js && node dist/srcServer.js"
},
这些结果都在整洁的控制台输出中 都在“ Hallo World!”中产生在新打开的浏览器窗口中显示。
只希望这对其他人有用。;-)