【问题标题】:Reusing Gulp tasks between projects在项目之间重用 Gulp 任务
【发布时间】:2016-10-31 17:47:10
【问题描述】:

我正在 GitHub 上处理一组项目,我想在这些项目之间共享 Gulp 构建管道。一切都使用 Babel,包括 Gulp 任务本身。我要共享的通用 Gulpfile 需要 Babel,然后是位于文件夹中的所有任务 - 通用文件如下所示:

require("babel-core/register");
require("require-dir")("gulp/tasks");

然后我尝试将通用管道打包到 NPM 包中,并将其作为 devDependency 添加到另一个项目中。然后我的项目的 gulpfile 取决于常见的设置如下所示:

require("./node_modules/cratis.client.javascript.setup/gulpfile"); 

当我运行它时,它似乎加载了 Babel,然后开始加载我的任务,但立即失败:

(function (exports, require, module, __filename, __dirname) { import gulp from "gulp";
                                                              ^^^^^^
SyntaxError: Unexpected token import
    at Object.exports.runInThisContext (vm.js:53:16)

这表明 Babel 没有加载,我觉得这很奇怪 - 因为我希望看到与第一个要求相关的加载错误。

无法真正弄清楚这里发生了什么,所以我决定尝试不同的路径; Git 子模块。 我将通用管道项目作为 Git 子模块添加到项目中,并包含相对于子模块位置的 gulpfile。 这似乎根本不起作用 - 基本上找不到文件。

其他人在做什么?我真的没有找到任何好的例子。

如果 Git 子模块路径是正确的,我希望看到“node_modules”也是共享的,并且是维护它的简单方法。

【问题讨论】:

    标签: javascript build gulp pipeline


    【解决方案1】:

    好吧,我想我终于发现了问题所在。 npm 依赖项仅安装到父项目“依赖项”,而不是“devDependencies”。因此,因为在您的 npm cratis.client.javascript.setup 中您只定义了 devDependencies,所以不会使用您的 https://github.com/Cratis/Client.JavaScript.Core 项目中的 npm install 安装 thore。要解决这个问题,只需将 cratis.client.javascript.setup 中的所有 devDepencies 移到“依赖项”下即可。

    【讨论】:

    • 优秀的捕获 - 这让我们更近了一步。我假设您尝试了我开始的 Git 子模块方法。我以为我已经签入了该更改,但实际上只是将包与该更改一起推送到了 NPM。所以谢谢你看到。它无法找到任务 - 并且有一个很好的解释。现在有两组 node_modules 存储库,它加载了 2 个不同的 gulps :) 我在两者的 index.js 中都放入了 console.log() ,它显示它同时加载了两者。所以它吐出“任务默认值不在你的 gulpfile 中。现在我只需要一个父 node_module 为他们两个。实验。
    • 随着一些移动 - 它现在确实有效,我首先得到了我想要的结构作为奖励。基本上摆脱了 src 文件夹。我的开发每个存储库策略都有一个项目,并且不需要它 - 除了我已经有 Source 和 Specifications 作为其中的文件夹。现在我有一个 Modules 文件夹来保存 Git 子模块。这将重用层次结构顶部的 node_modules,因为 node 递归地查找包。自从您带领我走上正确的道路以来,我会将您的答案标记为解决方案!非常感谢,非常感谢!
    【解决方案2】:

    您可能忘记包含 Babel 依赖项以使模块导入正常工作。 在这里查看这个项目https://github.com/andreasonny83/mdl-starter-kit 你需要 npm install --save-dev babel-core babel-loader babel-preset-es2015 和 babel-register

    【讨论】:

    • 不。他们在那里。我已经通过我制作的 NPM 包进行了隐式尝试,它具有依赖关系,并且还使用 NPM 包直接在项目中进行了尝试。一样。它并没有说明无法加载包 - 我预计那里会出现错误。设置项目工作正常,只是项目试图将管道作为一个包重用,而它没有。
    • 所以,也许你只需要在你的 .babelrc 中启用 ES2015 转译器:{ "presets": ["es2015"] }
    • 另外,这张卡片可能与stackoverflow.com/questions/33604470/…有关,所以也可以看看那里找到你的答案
    • 感谢您的宝贵建议。我也已经有了预设。如果你想要并且有时间,我这里有项目:github.com/Cratis/Client.JavaScript.Core - 这里的安装项目:github.com/Cratis/Client.JavaScript.Setup,这里作为包部署:npmjs.com/package/cratis.client.javascript.setup。一旦你安装好 NPM 并运行 Gulp,你就会发现问题。
    • 嗯,这似乎确实有效。让我们看看我是否做得对。我git clone https://github.com/Cratis/Client.JavaScript.Setup.git,然后npm install 并运行gulp。我回来了:Starting 'watch'...
    猜你喜欢
    • 2015-02-04
    • 2017-09-15
    • 2018-10-20
    • 1970-01-01
    • 1970-01-01
    • 2015-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多