【问题标题】:How to use nodemon in npm scripts to build and start scripts?如何在 npm 脚本中使用 nodemon 来构建和启动脚本?
【发布时间】:2016-08-18 03:50:01
【问题描述】:
"scripts": {
  "build": "babel src -d lib",
  "start": "node --use_strict ./lib/index.js",
  "watch": "nodemon lib/index.js --exec npm run build"
}

使用命令npm run watch 会导致运行以下错误命令:[nodemon] starting "npm lib/index.js run build"

如何编写一个 nodemon 命令,在重新加载时,使用 babel 转译代码并重新加载代码?

【问题讨论】:

    标签: javascript node.js npm nodemon babeljs


    【解决方案1】:

    您可以简单地使用babel-node 运行您的代码以避免显式转译。

    $ nodemon lib/index.js --exec babel-node --presets=es2015,stage-2
    

    这似乎是this is the recommended 使用nodemonbabel 的方式。

    请注意,运行--exec 可能在远程运行development 环境时会产生意想不到的副作用localhost

    【讨论】:

    • 运行 babel-node 需要安装什么包? NPM 说 babel-node 不在存储库中,即使我已经通过 npm 安装了 babel-cli,运行你给定的命令说 babel-node 不可用。
    • babel-cli 是正确的。您应该全局安装它或将执行路径更改为./node_modules/.bin/babel-node
    • 我在项目中全局和本地安装了babel-cli,但出现以下错误。 i.imgur.com/UwXaPTz.jpg
    • 您正尝试将 babel-node 作为 npm 脚本运行,就像在 package.json 中声明的那样。您可以找到一个工作示例here
    • 哎呀,那是我的错误,对不起。我已经确定了答案。
    【解决方案2】:
      "scripts": {
        "build": "babel src -d lib",
        "start": "node --use_strict ./lib/index.js",
        "watch": "nodemon --exec \"npm run build && node lib/index.js\" -e js --ignore lib/"
      }
    

    然后运行npm run watch。之后,每次修改源代码(.js文件)时,nodemon都会重新构建项目并重启服务器。

    --exec 指定您希望 nodemon 在文件更改时执行哪些非节点脚本(也适用于上述节点脚本 node lib/index.js)。

    -e 指定您希望 nodemon 监视的文件扩展名。

    --ignore 指定您希望 nodemon 忽略的文件/目录。此选项对于解决此问题至关重要,因为如果您不指定忽略此 lib/ 文件夹,nodemon 将无限重启,因为 lib/ 中的编译文件也是 .js 文件。

    【讨论】:

      【解决方案3】:

      你可以有两个 nodemon,一个用来编译,另一个用来运行你的代码。在 package.json 你可以这样做:

      "scripts": {
          "serve": "nodemon --watch dist/ ./dist/index.js",
          "build" : "nodemon --watch src/ --exec babel ./src --out-dir ./dist --source-maps --copy-files"
        },
      

      【讨论】:

        【解决方案4】:

        有一个选项可以在“监视”模式下使用 Babel 构建文件,让 Nodemon 仅监视“构建”文件夹并在编译输出发生更改时重新启动应用程序。

        {
          "name": "app",
          "version": "1.0.0",
          "private": true,
          "dependencies": {},
          "devDependencies": {
            "@babel/cli": "^7.6.0",
            "@babel/core": "^7.6.0",
            "@babel/preset-env": "^7.6.0",
            "nodemon": "^1.19.2"
          },
          "scripts": {
            "build": "babel src --out-dir build --source-maps=inline --verbose",
            "start": "yarn build --watch & sleep 1 && nodemon --watch build build/index.js"
          }
        }
        

        此示例取自 GitHub 上的 GraphQL API Examples 存储库。

        【讨论】:

          【解决方案5】:

          更好的选择是不使用全局安装,而是使用本地安装的包。这也将有助于自动化构建,这些构建可能按照 12 因素应用程序设计设置为与本地计算机相同。

          "scripts": {
          "watch": "node ./node_modules/nodemon/bin/nodemon.js"
          

          }

          【讨论】:

          • 你能解释一下吗?
          • 不要在cli中全局使用nodemon,而是使用上面的代码,您可以使用--save或--save-dev调用本地安装的包,node ./node_modules/nodemon/bin/nodemon .js 在 npm 脚本或 cli cmd 中。还要添加您需要传递的任何参数。基本上不是使用全局标识符调用它,而是直接从解决方案结构中调用。这有助于您的团队以及他们都将使用相同的版本,如果软件包在一段时间内全局安装在多个工作站上,则版本很可能会有所不同。
          【解决方案6】:
          "scripts": {
            "build": "babel src -d lib",
            "start": "nodemon --exec babel-node lib/index.js",
            "serve": "npm run build && node lib/index.js"
          }
          

          Serve 用于生产,使用 npm start 你要做的就是先编译然后运行 ​​nodemon。

          【讨论】:

            猜你喜欢
            • 2018-12-28
            • 2016-02-26
            • 1970-01-01
            • 2018-01-29
            • 2017-05-10
            • 1970-01-01
            • 1970-01-01
            • 2018-07-12
            • 1970-01-01
            相关资源
            最近更新 更多