JavaScript 자체 관리는 Grunt 작업 자동 관리 도구를 의미합니다. Grunt는 다양한 작업을 자동으로 관리하고 실행하는 데 도움이 됩니다. Grunt는 미리 설정된 순서에 따라 일련의 작업을 자동으로 실행하는 자동 작업 실행기입니다. 반복적인 작업의 부담.
이 문서의 운영 환경: Windows 7 시스템, JavaScript 버전 1.8.5, Dell G3 컴퓨터.
JavaScript 자체 관리란 무엇인가요? Grunt: 자동 작업 관리 도구
安装命令脚本文件Gruntfile.jsGruntfile.js实例:grunt-contrib-cssmin模块常用模块设置grunt-contrib-jshintgrunt-contrib-concatgrunt-contrib-uglifygrunt-contrib-copygrunt-contrib-watch其他模块参考链接
JavaScript 개발 과정에서 우리는 파일 병합, 코드 압축, 구문 오류 확인, Sass 코드 변환 등 반복적인 작업을 자주 접하게 됩니다. CSS 코드 등. 일반적으로 우리는 다양한 작업을 완료하기 위해 다양한 도구를 사용해야 하는데, 이는 반복적인 작업이고 시간이 많이 소요됩니다. Grunt는 이러한 문제를 해결하기 위해 고안된 도구로, 다양한 작업을 자동으로 관리하고 실행할 수 있도록 도와줍니다.
간단히 말하면 Grunt는 미리 설정된 순서에 따라 일련의 작업을 자동으로 실행하는 자동 작업 실행기입니다. 이를 통해 작업 흐름이 간소화되고 반복 작업의 부담이 줄어듭니다.
Installation
Grunt는 Node.js를 기반으로 설치하기 전에 Node.js를 먼저 설치한 후 다음 명령을 실행해야 합니다.
sudo npm install grunt-cli -g
grunt-cli는 grunt 명령줄 인터페이스가 설치되었음을 나타내고 매개변수 g는 전역 설치를 나타냅니다.
Grunt는 명령줄 인터페이스를 설치하는 것 외에도 필요에 따라 해당 모듈을 설치해야 합니다. 프로젝트마다 동일한 모듈의 다른 버전이 필요할 수 있으므로 이러한 모듈은 로컬로 설치해야 합니다.
먼저 프로젝트의 루트 디렉터리에 package.json 텍스트 파일을 생성하여 현재 프로젝트에 필요한 모듈을 지정합니다. 여기에 예가 있습니다.
{"name": "my-project-name","version": "0.1.0","author": "Your Name","devDependencies": {"grunt": "0.x.x","grunt-contrib-jshint": "*","grunt-contrib-concat": "~0.1.1","grunt-contrib-uglify": "~0.1.0","grunt-contrib-watch": "~0.1.4"}}
위의 package.json 파일에는 프로젝트의 이름과 버전을 나타내는 것 외에도 프로젝트가 의존하는 grunt 모듈과 버전도 devDependency 속성에 지정되어 있습니다. grunt 코어 모듈은 최신 버전 0입니다. x.x이고 jshint 플러그인은 최신 버전이고 concat 플러그인은 버전 0.1.1 이상이며 uglify 플러그인은 버전 0.1.0 이상이며 watch 플러그인은 버전 0.1.0 이상입니다. 버전 0.1.4보다.
그런 다음 프로젝트의 루트 디렉터리에서 다음 명령을 실행하면 이러한 플러그인이 node_modules 하위 디렉터리에 자동으로 설치됩니다.
npm install
위 방법은 package.json이 이미 존재하는 상황을 위한 방법입니다. package.json 파일을 자동으로 생성하려면 npm init 명령을 사용하고 화면의 지시에 따라 필요한 모듈의 이름과 버전에 답하면 됩니다.
npm init
기존 package.json 파일에 Grunt 모듈이 포함되어 있지 않은 경우, Grunt 모듈을 직접 설치할 때 --save-dev 매개변수를 추가하면 해당 모듈이 package.json 파일에 자동으로 추가됩니다.
npm install--save-dev
예를 들어 위의 package.json 파일에 지정된 모듈에 해당하면 다음 npm 명령을 실행해야 합니다.
npm install grunt --save-devnpm install grunt-contrib-jshint --save-devnpm install grunt-contrib-concat --save-devnpm install grunt-contrib-uglify --save-devnpm install grunt-contrib-watch --save-dev命令脚本文件Gruntfile.js
모듈 설치 후 다음 단계는 프로젝트의 루트 디렉터리에 새 스크립트 파일 Gruntfile.js를 만드는 것입니다. package.json이 npm의 구성 파일인 것처럼 grunt의 구성 파일입니다. Gruntfile.js는 일반적인 Node.js 모듈이 작성되는 방식입니다.
module.exports = function(grunt) {// 配置Grunt各种模块的参数grunt.initConfig({jshint: { /* jshint的参数 */ },concat: { /* concat的参数 */ },uglify: { /* uglify的参数 */ },watch:{ /* watch的参数 */ }});// 从node_modules目录加载模块文件grunt.loadNpmTasks('grunt-contrib-jshint');grunt.loadNpmTasks('grunt-contrib-concat');grunt.loadNpmTasks('grunt-contrib-uglify');grunt.loadNpmTasks('grunt-contrib-watch');// 每行registerTask定义一个任务grunt.registerTask('default', ['jshint', 'concat', 'uglify']);grunt.registerTask('check', ['jshint']);};
위 코드는 그런트 코드의 세 가지 방법을 사용합니다.
grunt.initConfig: 다양한 모듈의 매개변수를 정의하며, 각 멤버 항목은 동일한 이름을 가진 모듈에 해당합니다. grunt.loadNpmTasks: 작업을 완료하는 데 필요한 모듈을 로드합니다. grunt.registerTask: 특정 작업을 정의합니다. 첫 번째 매개변수는 작업 이름이고, 두 번째 매개변수는 작업이 순서대로 사용해야 하는 모듈을 나타내는 배열입니다. 기본 작업 이름은 매개변수 없이 grunt 명령을 직접 입력하는 경우 호출될 모듈(이 예에서는 jshint, concat 및 uglify)을 나타냅니다. 이 예제의 check 작업은 jshint 플러그인을 사용하여 구문 검사를 수행함을 나타냅니다. 암호.
위 코드는 jshint(구문 오류 확인), concat(파일 병합), uglify(코드 압축) 및 watch(자동 실행)의 총 4개 모듈을 로드합니다. 다음으로 사용방법은 2가지가 있습니다.
[추천 학습: javascript 고급 튜토리얼]
(1)
grunt jshint
와 같은 특정 모듈을 명령줄에서 실행합니다. 위 코드는 jshint 모듈을 실행한다는 의미입니다.
(2) 특정 작업을 수행하는 명령줄. 예를 들어
grunt check
위 코드는 확인 작업을 실행하고 있음을 나타냅니다. 작업이 성공하면 "오류 없이 완료되었습니다."가 표시됩니다.
작업 이름이 지정되지 않은 경우 grunt를 입력하여 기본 작업을 실행하세요.
Gruntfile.js 예: grunt-contrib-cssmin 모듈
다음은 cssmin 모듈을 통해 Gruntfile.js 파일을 작성하는 방법을 보여줍니다. cssmin 모듈은 CSS 파일을 최소화하는 데 사용됩니다.
먼저 프로젝트의 루트 디렉터리에 모듈을 설치합니다.
npm install grunt-contrib-cssmin --save-dev
그런 다음 새 파일 Gruntfile.js를 만듭니다.
module.exports = function(grunt) {grunt.initConfig({cssmin: {minify: {expand: true,cwd: 'css/',src: ['*.css', '!*.min.css'],dest: 'css/',ext: '.min.css'},combine: {files: {'css/out.min.css': ['css/part1.min.css', 'css/part2.min.css']}}}});grunt.loadNpmTasks('grunt-contrib-cssmin');grunt.registerTask('default', ['cssmin:minify','cssmin:combine']);};
위 코드의 세 가지 메소드에 대해 하나씩 자세히 살펴보겠습니다.
(1)grunt.loadNpmTasks
grunt.loadNpmTasks 메소드는 모듈 파일을 로드합니다.
grunt.loadNpmTasks('grunt-contrib-cssmin');
여러 모듈을 사용해야 합니다. 여기에서는 각 모듈을 하나씩 로드하려면 몇 가지 grunt.loadNpmTasks 문을 작성해야 합니다.
如果加载模块很多,这部分会非常冗长。而且,还存在一个问题,就是凡是在这里加载的模块,也同时出现在package.json文件中。如果使用npm命令卸载模块以后,模块会自动从package.json文件中消失,但是必须手动从Gruntfile.js文件中清除,这样很不方便,一旦忘记,还会出现运行错误。这里有一个解决办法,就是安装load-grunt-tasks模块,然后在Gruntfile.js文件中,用下面的语句替代所有的grunt.loadNpmTasks语句。
require('load-grunt-tasks')(grunt);
这条语句的作用是自动分析package.json文件,自动加载所找到的grunt模块。
(2)grunt.initConfig
grunt.initConfig方法用于模块配置,它接受一个对象作为参数。该对象的成员与使用的同名模块一一对应。由于我们要配置的是cssmin模块,所以里面有一个cssmin成员(属性)。
cssmin(属性)指向一个对象,该对象又包含多个成员。除了一些系统设定的成员(比如options),其他自定义的成员称为目标(target)。一个模块可以有多个目标(target),上面代码里面,cssmin模块共有两个目标,一个是“minify”,用于压缩css文件;另一个是“combine”,用于将多个css文件合并一个文件。
每个目标的具体设置,需要参考该模板的文档。就cssmin来讲,minify目标的参数具体含义如下:
expand:如果设为true,就表示下面文件名的占位符(即*号)都要扩展成具体的文件名。cwd:需要处理的文件(input)所在的目录。src:表示需要处理的文件。如果采用数组形式,数组的每一项就是一个文件名,可以使用通配符。dest:表示处理后的文件名或所在目录。ext:表示处理后的文件后缀名。
除了上面这些参数,还有一些参数也是grunt所有模块通用的。
filter:一个返回布尔值的函数,用于过滤文件名。只有返回值为true的文件,才会被grunt处理。dot:是否匹配以点号(.)开头的系统文件。makeBase:如果设置为true,就只匹配文件路径的最后一部分。比如,a?b可以匹配/xyz/123/acb,而不匹配/xyz/acb/123。
关于通配符,含义如下:
*:匹配任意数量的字符,不包括/。?:匹配单个字符,不包括/。**:匹配任意数量的字符,包括/。{}:允许使用逗号分隔的列表,表示“or”(或)关系。!:用于模式的开头,表示只返回不匹配的情况。
比如,foo/.js匹配foo目录下面的文件名以.js结尾的文件,foo/**/.js匹配foo目录和它的所有子目录下面的文件名以.js结尾的文件,!*.css表示匹配所有后缀名不为“.css”的文件。
使用通配符设置src属性的更多例子:
{src: 'foo/th*.js'}grunt-contrib-uglify{src: 'foo/{a,b}*.js'}{src: ['foo/a*.js', 'foo/b*.js']}
至于combine目标,就只有一个files参数,表示输出文件是css子目录下的out.min.css,输入文件则是css子目录下的part1.min.css和part2.min.css。
files参数的格式可以是一个对象,也可以是一个数组。
files: {'dest/b.js': ['src/bb.js', 'src/bbb.js'],'dest/b1.js': ['src/bb1.js', 'src/bbb1.js'],},// orfiles: [{src: ['src/aa.js', 'src/aaa.js'], dest: 'dest/a.js'},{src: ['src/aa1.js', 'src/aaa1.js'], dest: 'dest/a1.js'},],
如果minify目标和combine目标的属性设置有重合的部分,可以另行定义一个与minify和combine平行的options属性。
grunt.initConfig({cssmin: {options: { /* ... */ },minify: { /* ... */ },combine: { /* ... */ }}});
(3)grunt.registerTask
grunt.registerTask方法定义如何调用具体的任务。“default”任务表示如果不提供参数,直接输入grunt命令,则先运行“cssmin:minify”,后运行“cssmin:combine”,即先压缩再合并。如果只执行压缩,或者只执行合并,则需要在grunt命令后面指明“模块名:目标名”。
grunt # 默认情况下,先压缩后合并grunt cssmin:minify # 只压缩不合并grunt css:combine # 只合并不压缩
如果不指明目标,只是指明模块,就表示将所有目标依次运行一遍。
grunt cssmin常用模块设置
grunt的模块已经超过了2000个,且还在快速增加。下面是一些常用的模块(按字母排序)。
grunt-contrib-clean:删除文件。grunt-contrib-compass:使用compass编译sass文件。grunt-contrib-concat:合并文件。grunt-contrib-copy:复制文件。grunt-contrib-cssmin:压缩以及合并CSS文件。grunt-contrib-imagemin:图像压缩模块。grunt-contrib-jshint:检查JavaScript语法。grunt-contrib-uglify:压缩以及合并JavaScript文件。grunt-contrib-watch:监视文件变动,做出相应动作。
模块的前缀如果是grunt-contrib,就表示该模块由grunt开发团队维护;如果前缀是grunt(比如grunt-pakmanager),就表示由第三方开发者维护。
以下选几个模块,看看它们配置参数的写法,也就是说如何在grunt.initConfig方法中配置各个模块。
grunt-contrib-jshint
jshint用来检查语法错误,比如分号的使用是否正确、有没有忘记写括号等等。它在grunt.initConfig方法里面的配置代码如下。
jshint: {options: {eqeqeq: true,trailing: true},files: ['Gruntfile.js', 'lib/**/*.js']},
上面代码先指定jshint的检查项目,eqeqeq表示要用严格相等运算符取代相等运算符,trailing表示行尾不得有多余的空格。然后,指定files属性,表示检查目标是Gruntfile.js文件,以及lib目录的所有子目录下面的JavaScript文件。
grunt-contrib-concat
concat用来合并同类文件,它不仅可以合并JavaScript文件,还可以合并CSS文件。
concat: {js: {src: ['lib/module1.js', 'lib/module2.js', 'lib/plugin.js'],dest: 'dist/script.js'}css: {src: ['style/normalize.css', 'style/base.css', 'style/theme.css'],dest: 'dist/screen.css'}},
js目标用于合并JavaScript文件,css目标用语合并CSS文件。两者的src属性指定需要合并的文件(input),dest属性指定输出的目标文件(output)。
grunt-contrib-uglify
uglify模块用来压缩代码,减小文件体积。
uglify: {options: {banner: bannerContent,sourceMapRoot: '../',sourceMap: 'distrib/'+name+'.min.js.map',sourceMapUrl: name+'.min.js.map'},target : {expand: true,cwd: 'js/origin',src : '*.js',dest : 'js/'}},
上面代码中的options属性指定压缩后文件的文件头,以及sourceMap设置;target目标指定输入和输出文件。
grunt-contrib-copy
copy模块用于复制文件与目录。
copy: {main: {src: 'src/*',dest: 'dest/',},},
上面代码将src子目录(只包含它下面的第一层文件和子目录),拷贝到dest子目录下面(即dest/src目录)。如果要更准确控制拷贝行为,比如只拷贝文件、不拷贝目录、不保持目录结构,可以写成下面这样:
copy: {main: {expand: true,cwd: 'src/',src: '**',dest: 'dest/',flatten: true,filter: 'isFile',},},grunt-contrib-watch
watch模块用来在后台运行,监听指定事件,然后自动运行指定的任务。
watch: { scripts: {files: '**/*.js',tasks: 'jshint',options: {livereload: true,}, }, css: {files: '**/*.sass',tasks: ['sass'],options: {livereload: true,}, },},
设置好上面的代码,打开另一个进程,运行grunt watch。此后,任何的js代码变动,文件保存后就会自动运行jshint任务;任何sass文件变动,文件保存后就会自动运行sass任务。
需要注意的是,这两个任务的options参数之中,都设置了livereload,表示任务运行结束后,自动在浏览器中重载(reload)。这需要在浏览器中安装livereload插件。安装后,livereload的默认端口为localhost:35729,但是也可以用livereload: 1337的形式重设端口(localhost:1337)。
其他模块
下面是另外一些有用的模块。
(1)grunt-contrib-clean
该模块用于删除文件或目录。
clean: {build: {src: ["path/to/dir/one", "path/to/dir/two"]}}
(2)grunt-autoprefixer
该模块用于为CSS语句加上浏览器前缀。
autoprefixer: {build: {expand: true,cwd: 'build',src: [ '**/*.css' ],dest: 'build'}},
(3)grunt-contrib-connect
该模块用于在本机运行一个Web Server。
connect: {server: {options: {port: 4000,base: 'build',hostname: '*'}}}
connect模块会随着grunt运行结束而结束,为了使它一直处于运行状态,可以把它放在watch模块之前运行。因为watch模块需要手动中止,所以connect模块也就会一直运行。
(4)grunt-htmlhint
该模块用于检查HTML语法。
htmlhint: {build: {options: {'tag-pair': true,'tagname-lowercase': true,'attr-lowercase': true,'attr-value-double-quotes': true,'spec-char-escape': true,'id-unique': true,'head-script-disabled': true,},src: ['index.html']}}
上面代码用于检查index.html文件:HTML标记是否配对、标记名和属性名是否小写、属性值是否包括在双引号之中、特殊字符是否转义、HTML元素的id属性是否为唯一值、head部分是否没有script标记。
(5)grunt-contrib-sass模块
该模块用于将SASS文件转为CSS文件。
sass: {build: {options: {style: 'compressed'},files: {'build/css/master.css': 'assets/sass/master.scss'}}}
上面代码指定输出文件为build/css/master.css,输入文件为assets/sass/master.scss。
(6)grunt-markdown
该模块用于将markdown文档转为HTML文档。
markdown: {all: {files: [{expand: true,src: '*.md',dest: 'docs/html/',ext: '.html'}],options: {template: 'templates/index.html',}}},
上面代码指定将md后缀名的文件,转为docs/html/目录下的html文件。template属性指定转换时采用的模板,模板样式如下。
Document参考链接Frederic Hemberger, A build tool for front-end projectsMária Jurčovičová, Building a JavaScript Library with Grunt.jsBen Briggs,Speed Up Your Web Development Workflow with GruntOptimizing Images With GruntSwapnil Mishra, Simplifying Chores with GruntAJ ONeal, Moving to GruntJSGrunt Documentation, Configuring tasksLandon Schropp, Writing an Awesome Build Script with GruntMike Cunsolo, Get Up And Running With GruntMatt Bailey, A Beginner’s Guide to Using Grunt With MagentoPaul Bakaus, Supercharging your Gruntfile
위 내용은 JavaScript 자체 관리란 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!