所以我只是尝试使用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,我得到的似乎是整个源代码库:
共有123个文件(dist中的文件甚至没有用版本号标记)。
这是预期的结果......我使用Yarn是否错误(概念上)?
我是否应该将JQuery构建为项目的一部分,而不仅仅是包含和使用它?
答案 0 :(得分:2)
这就是yarn
,或更准确地说npm
yarn
作为模块的存储库使用的方式。
它并不真正只安装库。它安装发布的整个包。通常,发布者不会努力省略已发布版本中的某些文件,并且您基本上可以获得整个存储库。这包括预期的库文件,文档,原始源代码,测试等。
这就是为什么这个关于node_modules
的图片对于那些必须在他们生命的某个时刻使用npm
的人来说很有趣:
回答你的问题:不,你没有错误地使用它。它按预期工作,看起来很奇怪。
如果您只想要特定文件,最好的办法是使用yarn
进行安装,然后复制文件。但要小心,如果更新软件包版本,文件的目标可能会发生变化,请记住这一点。
答案 1 :(得分:2)
Marko的描述(以及那张精美的图表)对发生的事情给出了很好的解释。要回答有关解决问题的问题,从Gulp到WebPack的选择范围令人眼花缭乱。
对于像复制几个javascript库这样简单的事情,我建议使用ASP.NET中包含的基本BuildBundlerMinifier
很长一段时间。
默认的ASP.NET Core 2.0模板包含开箱即用的部分支持,但您需要对项目进行一些更改才能使工作正常:
在.csproj
文件中,您需要为BuildBundlerMinifier
添加套餐参考。您将此添加到与<ItemGroup>
的引用相同的Microsoft.AspNetCore.All
。这将启用捆绑器并使其在构建期间触发。
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.3" />
<PackageReference Include="BuildBundlerMinifier" Version="2.6.362" />
</ItemGroup>
正如我所提到的,标准模板对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
}
}
]
此处的最终结果是,每次构建项目时,捆绑程序都会自动将jquery.min.js
从node_modules/jquery/dist/
复制到root/scripts/
。
如果你正在使用纱线,我也强烈推荐使用Yarn.MSBuild
库。此包使MSBuild能够在构建期间自动检索您的Yarn包。与捆绑程序结合使用时,可确保每次构建时都在/scripts
文件夹中包含最新的程序包副本。