构建利用npm包的策略

时间:2017-11-27 21:48:06

标签: node.js npm

这一定是一个普遍解决的问题,但到目前为止我在Google / SO上找不到很多。

当我们运行npm install并获取50多个包,包括devDependencies以及运行时依赖项时,npm创建node_modules(如果需要)并在该文件夹中添加每个包。这意味着我们最终会在node_modules下包含数千个无关文件。每个包都包含自己的package.json,README.md,缩小文件,源文件等。我们的应用程序真的只关心jquery.js(对于DEV)和jquery.min.js(对于PROD),所以看起来好像将所有这些其他文件包含在我们的构建中,因此包含在我们的Web服务器中是浪费。

在以某种方式处理这些npm包时是否有标准,以便我们只向用户公开必要的文件?我想很多人都有这样的问题但是我没有看到任何内置的npm结构允许我们轻松地做到这一点。

见下文..黄色突出显示的文件是我们在Production中真正关心的唯一文件,但我们也获得了所有这些额外文件,包括源代码。

Screenshot

3 个答案:

答案 0 :(得分:0)

编辑package.json文件并删除所有不必要的依赖项,然后执行

npm install --save

通过执行此操作,它将创建一个本地node_modules文件夹,并仅将必要的包下载到其中(而不是全局node_modules文件夹)

请记住,默认情况下,节点检查本地node_modules文件夹。如果找不到它,它将使用全局文件夹。

此外,您不会公开node_modules文件夹中的所有软件包。实际上,除非您在node.js文件中require();

,否则不会使用它们

修改

要使jQuery在Node中工作,需要一个包含文档的窗口。由于Node中本身不存在这样的窗口,因此可以通过诸如jsdom之类的工具来模拟。这可用于测试目的。 https://www.npmjs.com/package/jquery

require("jsdom").env("", function(err, window) {
    if (err) {
        console.error(err);
        return;
    }

    var $ = require("jquery")(window);
});

所以jquery module在node.js的场景后面做的事情与常规的前端jquery相比有点不同。

它需要jsdom,因此您必须从此处下载https://github.com/tmpvar/jsdom

答案 1 :(得分:0)

最常见的解决方案包括将您的应用程序捆绑在另一台计算机上,然后在生产服务器上公开构建的工件。

那里有很多很棒的JS捆绑包。我个人使用的是BrowserifyWebpackRollup。所有令人惊叹的工具。

主要思想包括在Node环境中编写应用程序,然后将其捆绑以使其对浏览器可读。

对于更简单的项目,我发现Browserify在功能和易配置性之间做了很好的折衷。但最后还是品味问题。 :)

答案 2 :(得分:0)

根据我读到的npm install documentation,我认为没有选择以您想要的方式操作安装。软件包将以软件包作者决定打包的方式安装,有时候有时会缩小。

话虽如此,你应该寻找第三方solutions like modclean,它完全符合你想要的包后安装。在项目目录的根目录中运行此命令

signInWithCustomToken

只要您的测试覆盖率良好,ModClean就可以满足您的需求。