- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
关闭。这个问题需要更多tập trung .Câu hỏi này không liên quan đến chủ đề. Hiện tại không chấp nhận câu trả lời.
想改善这个问题吗?更新问题,使其仅关注一个问题 chỉnh sửa bài viết này .
6 个月前关闭。
Cải thiện câu hỏi này
我试图总结我对最流行的 JavaScript 包管理器、捆绑器和任务运行器的了解。如果我错了,请纠正我:
npm
& bower
是包管理器。他们只是下载依赖项,不知道如何自己构建项目。他们知道的就是拨打webpack
/gulp
/grunt
获取所有依赖项后。 bower
就像 npm
,但会构建一个扁平化的依赖树(与 npm
不同,它以递归方式进行)。意义 npm
获取每个依赖的依赖(可能多次获取相同的),而 bower
期望您手动包含子依赖项。有时 bower
Và npm
分别用于前端和后端(因为每兆字节在前端可能很重要)。 grunt
Và gulp
是任务运行器来自动化所有可以自动化的东西(即编译 CSS/Sass,优化图像,制作一个包并缩小/转译它)。 grunt
sự tương phản gulp
(就像 Maven
Và gradle
或配置与代码)。 Grunt 基于配置单独的独立任务,每个任务打开/处理/关闭文件。 Gulp 需要更少的代码并且基于 Node 流,这允许它构建管道链(无需重新打开同一个文件)并使其更快。 webpack
( webpack-dev-server
) - 对我来说,它是一个带有热重载更改的任务运行器,它允许您忘记所有 JS/CSS 观察器。 npm
/bower
+ 插件可能会取代任务运行器。它们的能力经常相交,因此如果您需要使用 gulp
会有不同的含义。/grunt
hiện hữu npm
+ 插件。但是任务运行器对于复杂的任务肯定更好(例如“在每个构建中创建包,从 ES6 转换到 ES5,在所有浏览器模拟器上运行它,制作屏幕截图并通过 ftp 部署到 dropbox”)。 browserify
允许为浏览器打包节点模块。 browserify
sự tương phản nút
của require
实际上是 AMD vs CommonJS . webpack
& webpack-dev-server
?官方文档说它是一个模块捆绑器,但对我来说它只是一个任务运行器。有什么不同? browserify
?我们不能对 node/ES6 导入做同样的事情吗? gulp
/grunt
hiện hữu npm
+ 插件?
1 Câu trả lời
Webpack 和 Browserify
Webpack 和 Browserify 做了几乎相同的工作,即 处理要在目标环境中使用的代码 (主要是浏览器,但您可以针对其他环境,如 Node)。这样处理的结果是一个或多个捆绑 - 适合目标环境的组装脚本。
例如,假设您编写了分成模块的 ES6 代码,并希望能够在浏览器中运行它。如果这些模块是 Node 模块,浏览器将无法理解它们,因为它们只存在于 Node 环境中。 ES6 模块也无法在 IE11 等较旧的浏览器中运行。此外,您可能使用了浏览器尚未实现的实验性语言功能(ES 下一个提案),因此运行此类脚本只会引发错误。 Webpack 和 Browserify 等工具通过 解决了这些问题将此类代码转换为浏览器能够执行的形式 .最重要的是,它们可以对这些捆绑包应用各种各样的优化。
但是,Webpack 和 Browserify 有很多不同,Webpack 默认提供了很多工具(例如代码拆分),而 Browserify 只能在下载插件后才能做到这一点,但 使用这两种导致非常相似的结果 .这归结为个人喜好(Webpack 更时尚)。顺便说一句,Webpack 不是任务运行器,它只是文件的处理器(它通过所谓的加载器和插件处理它们)并且它可以由任务运行器运行(以及其他方式)。
Webpack 开发服务器
Webpack Dev Server 提供了与 Browsersync 类似的解决方案 - 一个开发服务器,您可以在其中快速部署您的应用程序,并立即验证您的开发进度,开发服务器会在代码更改时自动刷新浏览器,甚至传播更改的代码浏览器无需重新加载所谓的热模块替换。
任务运行器与 NPM 脚本
我一直在使用 Gulp,因为它简洁且易于编写任务,但后来发现我根本不需要 Gulp 和 Grunt。我曾经需要的一切都可以使用 NPM 脚本通过他们的 API 运行 3rd 方工具来完成。 在 Gulp、Grunt 或 NPM 脚本之间进行选择取决于您团队的品味和经验。
虽然 Gulp 或 Grunt 中的任务即使对于不太熟悉 JS 的人也很容易阅读,但它是另一种需要和学习的工具,我个人更喜欢缩小依赖关系并使事情变得简单。另一方面,用运行那些 3rd 方工具的 NPM 脚本和(可能是 JS)脚本的组合替换这些任务(例如,节点脚本配置和运行 rimraf 用于清理目的)可能更具挑战性。但在大多数情况下,这三者的结果相同。
ví dụ
至于例子,我建议你看看这个React starter project ,它向您展示了 NPM 和 JS 脚本的完美组合,涵盖了整个构建和部署过程。您可以在 gói.json
中找到这些 NPM 脚本。在根文件夹中名为 scripts
的属性中.在那里你会遇到像 babel-node tools/run start
这样的命令。 . Babel-node 是一个 CLI 工具(不适合生产使用),它首先编译 ES6 文件 tools/run
(run.js 文件位于 công cụ ) - 基本上是一个运行器实用程序。这个运行器将一个函数作为参数并执行它,在本例中是 bắt đầu
- 另一个实用程序( start.js
)负责捆绑源文件(客户端和服务器)并启动应用程序和开发服务器(开发服务器可能是 Webpack Dev Server 或 Browsersync)。
更准确地说,start.js
创建客户端和服务器端包,启动快速服务器并在成功启动后初始化浏览器同步,在撰写本文时看起来像这样(请参阅 react starter project 以获取最新代码)。
const bs = Browsersync.create();
bs.init({
...(DEBUG ? {} : { notify: false, ui: false }),
proxy: {
target: host,
middleware: [wpMiddleware, ...hotMiddlewares],
},
// no need to watch '*.js' here, webpack will take care of it for us,
// including full page reloads if HMR won't work
files: ['build/content/**/*.*'],
}, resolve)
proxy.target
,他们在其中设置要代理的服务器地址,可能是
http://localhost:3000 ,Browsersync 启动一个服务器监听
http://localhost:3001 ,其中生成的 Assets 具有自动更改检测和热模块替换功能。如您所见,还有另一个配置属性
files
对于单个文件或模式,浏览器同步会监视更改并在发生更改时重新加载浏览器,但正如评论所说,Webpack 负责使用 HMR 自行查看 js 源,因此它们会在那里进行协作。
gulp.task('bundle', function() {
// bundling source files with some gulp plugins like gulp-webpack maybe
});
gulp.task('start', function() {
// starting server and stuff
});
关于gruntjs - NPM vs. Bower vs. Browserify vs. Gulp vs. Grunt vs. Webpack,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35062852/
我安装了 grunt 和 grunt cli,但仍然出现命令未找到错误 { "name": "angulartdd", "version": "1.0.0", "description":
我有一个使用“grunt-contrib-watch”和“grunt-exec”的 Grunt.js 文件,这是因为我想以一种独特的方式使用 handlebars 预编译器的一些自定义功能。 代码:
我正忙于尝试完成我正在运行的部署脚本。它可能有一半的时间有效,而且令人沮丧,因为我使用的大部分代码都不是我写的。我真的希望有一个我可以执行的较低级别的解决方法。 基本上发生的事情是我正在尝试执行 5
我想像在文档中定义的那样将参数传递给grunt-shell: module.exports = function(grunt) { // Configure Grunt grunt.initConfi
背景 我正在使用 Yeoman webapp 来搭建我的前端。 在 gruntfile 中,他们使用 grunt-rev 和 grunt-usemin Grunt-rev 将“修改”我的 Assets
我已经设置了grunt-eslint在我的 gruntfile.js 中,但是当我运行“grunt eslint”时,什么也没有发生。该任务看似即将开始,但 15 分钟后却停滞不前。 我的所有其他任务
我最近开始使用 grunt 做 JS 项目。 我有一个名为“grunt-contrib-jasmine”的插件用于 Jasmine 测试。我工作得很好,但我无法在浏览器中通过 specrunner 运
谁能告诉我这里做错了什么(我是 grunt 的新手)一个大学给我提供了一个基本的 gruntfile 设置 我已经安装了 node、js 和 grunt,但我不知道如何安装各种包(uglify、con
我正在尝试使用 grunt-contrib-watch和 grunt-rsync将任何文件更改上传到我的开发服务器。这是我的设置: var path = require('path'); module
尝试使用grunt-kill创建一个任务来终止我的 server-scorm 任务,并最终终止所有相关任务。这些说明非常短,因为它假设我知道有关 PID 文件的所有信息(我不知道,不是开发人员的错误)
我要么脑子一片空白,要么本该更复杂。 我正在尝试从 Grunt 任务运行 grunt-init,如下所示: grunt.registerTask('init', 'Scaffold various a
我有一个从玩家发射的射弹预制件,当它与“边界”碰撞时,它应该摧毁自己,当它击中“咕噜声”时,它应该摧毁自己和咕噜声。但是,当它碰到边界时,它会破坏自身和边界的对撞机。我创建了一个自定义标签脚本,允许我
module.exports = function(grunt){ grunt.initConfig({ pkg: grunt.file.readJSON('package.json'),
我已经加入了一个非营利性开源项目,想帮点忙,但我对 Grunt 不熟悉。我做了一些研究,但无法弄清楚为什么配置不起作用。 这是我正在尝试使用的插件。它允许应用多个后处理器,但我现在只需要 Autopr
下面的代码读取app/modules/中的每个子目录js的内容(例如app/modules/module1/js/, app/modules/module2/js/, aso.) 此脚本在不使用最后一
我正在尝试使用 grunt-exec 运行一个 javascript 测试运行程序,并传入一个已部署的链接变量。 我尝试通过使用 exec:setLink 设置环境变量 grunt.option('l
当我使用 grunt-contrib-watch 更改我的 js 文件时,我试图让 Grunt 重新加载它们。这是我的 Gruntfile: module.exports = function(gru
所以我的意思是: grunt.registerTask('default', ['default']); // CLI: grunt grunt.registerTask('serve', ['ser
我想创建一个通用的顶级 Gruntfile.js,配置为监视较少的文件更改。当less文件发生变化时,我想将其编译为css,然后在浏览器中实时加载css文件。我的功能正常,但我必须为每个项目复制 Gr
我正在使用 grunt-xmlpoke 更新 xml 文件。 xml 文件的路径作为参数提供。问题是文件部分中的第一个 WebConfigPath (键)被视为字符串。它更新了我的 xml 文件的本地
Tôi là một lập trình viên xuất sắc, rất giỏi!