我错过了什么(第一次Yarn用户+ JQuery)

时间:2018-02-07 18:04:05

标签: jquery asp.net-core yarnpkg

所以我只是尝试使用Yarn将JQuery运行时添加到.NET Core网站项目中。

我在项目文件夹中运行的命令是:

  yarn add jquery --modules-folder ./root/scripts

它确实添加了jQuery(指定的子文件夹),但它增加了比我预期更多的WAY。有了Nuget,我会得到:

  jquery-3.3.1.js
  jquery-3.3.1.min.js
  jquery-3.3.1.min.map

即使Nuget不会将文件添加为网站内容(虽然我可以只是对它们进行xcopy),但我会得到我需要的东西。但是对于Yarn,我得到的似乎是整个源代码库:

enter image description here

共有123个文件(dist中的文件甚至没有用版本号标记)。

这是预期的结果......我使用Yarn是否错误(概念上)?

我是否应该将JQuery构建为项目的一部分,而不仅仅是包含和使用它?

2 个答案:

答案 0 :(得分:2)

这就是yarn,或更准确地说npm yarn作为模块的存储库使用的方式。

它并不真正只安装库。它安装发布的整个包。通常,发布者不会努力省略已发布版本中的某些文件,并且您基本上可以获得整个存储库。这包括预期的库文件,文档,原始源代码,测试等。

这就是为什么这个关于node_modules的图片对于那些必须在他们生命的某个时刻使用npm的人来说很有趣:

enter image description here

回答你的问题:不,你没有错误地使用它。它按预期工作,看起来很奇怪。

如果您只想要特定文件,最好的办法是使用yarn进行安装,然后复制文件。但要小心,如果更新软件包版本,文件的目标可能会发生变化,请记住这一点。

答案 1 :(得分:2)

Marko的描述(以及那张精美的图表)对发生的事情给出了很好的解释。要回答有关解决问题的问题,从Gulp到WebPack的选择范围令人眼花缭乱。

对于像复制几个javascript库这样简单的事情,我建议使用ASP.NET中包含的基本BuildBundlerMinifier很长一段时间。

默认的ASP.NET Core 2.0模板包含开箱即用的部分支持,但您需要对项目进行一些更改才能使工作正常:

  1. .csproj文件中,您需要为BuildBundlerMinifier添加套餐参考。您将此添加到与<ItemGroup>的引用相同的Microsoft.AspNetCore.All。这将启用捆绑器并使其在构建期间触发。

    <ItemGroup>
      <PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.3" />
      <PackageReference Include="BuildBundlerMinifier" Version="2.6.362" />
    </ItemGroup>
    
  2. 正如我所提到的,标准模板对bundler有部分支持。我的意思是它默认包含项目根目录中的bundleconfig.json文件。此文件配置捆绑程序触摸的文件。如果您要查找的只是jquery-3.3.1.min.js,那么您的文件应如下所示:

    [
      {
        "outputFileName": "root/scripts/jquery.min.js",
        "inputFiles": [
          "node_modules/jquery/dist/jquery.min.js"
        ],
        "minify": {
          "enabled": false
        }
      }
    ]
    
  3. 此处的最终结果是,每次构建项目时,捆绑程序都会自动将jquery.min.jsnode_modules/jquery/dist/复制到root/scripts/

    如果你正在使用纱线,我也强烈推荐使用Yarn.MSBuild库。此包使MSBuild能够在构建期间自动检索您的Yarn包。与捆绑程序结合使用时,可确保每次构建时都在/scripts文件夹中包含最新的程序包副本。