gpt4 book ai didi

javascript - 如何使用 urequire 嵌入依赖项

转载 作者:行者123 更新时间:2023-11-29 14:51:35 25 4
gpt4 key购买 nike

我使用 grunt-urequire 插件将我的项目 1 的模块编译成单个文件(我们称之为 project-1.js)。配置如下所示:

urequire: {
umd: {
template: 'UMD',
path: 'src',
dstPath: 'dist/umd'
},

dev: {
template: 'combined',
path: 'src',
main: 'Main',
dstPath: 'dist/<%= pkg.name %>-<%= pkg.version %>.js'
},

min: {
derive: ['dev', '_defaults'],
dstPath: 'dist/<%= pkg.name %>-<%= pkg.version %>.min.js',
optimize: 'uglify2'
},

_defaults: {
useStrict: true,
noConflict: true,
bundle: {
dependencies: {
exports: {
root: {
'Main': 'Project1'
}
}
}
}
}
}

Project-1 依赖于同样由 grunt-urequire 管理的 project-2。在 package.json 中:

"devDependencies": {
"project2": "^0.1",
...
}

现在我想在构建时将 project-2 依赖项嵌入到 project-1 中,这样就可以了

<script src="project-1.js"></script>

在浏览器中,不要手动包含项目 2。

我知道browserify支持这个,但是我可以使用 urequire 来实现吗?

最佳答案

uRequire 不会将外部依赖项(如 jqueryunderscore 等)嵌入到 combined.js 中文件,不像 browserify 这是唯一的选择(据我所知),它也是 r.js 的默认行为.

这在一定程度上是有意为之,因为最好加载(使用 RequireJS 或 <script/> )这些来自 CDN 的外部库:您的用户的浏览器可能在上次加载您的应用程序时已经缓存了它们(或其他人的应用程序)。下次你的 myApp.js更改,它只会下载那个,而不是一个包含所有相同外部库的整体包。

uRequire 实际上在确保这些从外部加载方面走了很长一段路,无论是在 nodejs(使用普通节点的 require )还是浏览器上,使用 AMD 或导出的全局属性(如 window.$window._ 或其他外部库被映射到)。

我想您可以轻松地覆盖此行为:只需放置 project-2.js每当您将它构建到 project-1 的源文件夹中时,只需在 project-1 中将其用作普通依赖项即可。

或者,您可以再次将所有 project-2 文件构建/转换为 AMD(未合并)到 project-1 的源文件夹中,并将它们用作其中的一部分。

最后,您可以将 project-2 源代码符号链接(symbolic link)到 project-1,它在 unix/linux 上支持了几十年,在 Windows 7 上也得到了支持。然后 uRequire 将只转换一次来自两个项目的源并构建为单个输出。

理想情况下,我希望拥有虚拟资源(参见 https://github.com/anodynos/uRequire/issues/40),这样您就可以将两个项目分开(即不将一个构建到另一个),而是将两者构建为一个输出。

关于javascript - 如何使用 urequire 嵌入依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24844263/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com