gulp requirejs 컴 파일 프로 세 스 를 작성 하 는 노트

3342 단어 node.jsgulp
RequireJS 에 중점 을 두 지 않 고 Webpack 으로 전환 하 는 것 을 권장 합 니 다.http://segmentfault.com/t/webpack/blogs
공식 적 인gulp-requirejs플러그 인 에 문제 가 있 습 니 다.end 사건 이 정상적으로 촉발 되 지 않 았 습 니 다.zensh 와 함께 보 았 습 니 다.그 는 문 제 를 찾 아 해결 방안 을 주 었 습 니 다.저 는 구 덩이 를 메 웠 습 니 다.나중에 웨 이 보 에 사용 하 라 는 알림 이 있 었 습 니 다gulp-requirejs-optimize.그런데 다운 로드 량 이 너무 안 됩 니 다.http://weibo.com/1651843872/BBzG2sHQm
여기 서 저 는 이 스 크 립 트 를 기록 하려 고 합 니 다.그 중에서 흐름 에 어떻게 대처 하 는 지 급 하 게 자 료 를 찾 아 천천히 찾 아 냈 습 니 다.Gulp 를 이해 하 는 데 도움 이 될 것 입 니 다.스 크 립 트 의 내용 은 다음 과 같 습 니 다.
coffeegulp.task 'mainjs', ->
  rjs = require 'requirejs'
  uglify = require 'gulp-uglify'
  rename = require 'gulp-rename'
  vinyl = require 'vinyl'
  through2 = require 'through2'

  stream = through2.obj()

  rjs.optimize
    wrap: true
    preserveLicenseComments: false
    optimize: 'none'
    name: 'main'
    baseUrl: 'build/script/'
    mainConfigFile: 'build/script/config.js'
    exclude: ['deps']
    out: (chunk) ->
      buffer = new vinyl
        path: 'main.js'
        contents: new Buffer chunk
      stream.write buffer
    (output) ->
      stream.end()

  stream
  .pipe uglify()
  .pipe rename(suffix: '.min')
  .pipe gulp.dest('./build/')

제 가 직면 한 일 은 requirejs 모듈 을 컴 파일 할 수 있 습 니 다.컴 파일 을 호출 한 다음 에 입력 을 gulp file stream 형식 으로 계속 전달 한 다음 에 uglify 등 으로 코드 를 후속 적 으로 조작 하여 gulp-requirejs 코드 를 읽 어 보 았 습 니 다.나 는 내 가 두 가지 문 제 를 해결 해 야 한 다 는 것 을 안다.https://github.com/RobinThrift/gulp-requirejs/blob/master/index.js
  • 새로운 Stream 을 만들어 야 하고 Gulp 플러그 인과 호 환 되 어야 합 니 다.저 는 원래 의 코드 를 배 우려 고 했 는데 그 가 사용 하 는event-stream모듈 이 너무 복잡 해서 정 해 지지 않 았 습 니 다
  • requirejs 모듈 에서 생 성 된 데 이 터 를 받 아들 이 고 흐름 에 들 어 갈 수 있 는 번 거 로 운 것 은gutil.File이 구조 기 가 새로운 버 전에 서 없어 졌 다 는 것 이다
  • .
    스 트림 생 성
    이전에 저 는 Gulp 의 Stream 이 봉 인 된 파일 흐름pathcontents문서 와 시도 에 따라 Stream 에서 String 이나 Buffer 만 사용 할 수 있다 는 것 을 알 게 되 었 습 니 다.저 는 예 에서 through 2 봉 인 된 stream 이 가능 하 다 는 것 만 기억 하고 언급 한 것 을 보 았 습 니 다.Stream 은 대상 을 전송 할 수 있 는 개objectMode가 있 습 니 다:http://nodejs.org/api/stream.html#stream_object_mode 그런데 작 동 하 는 API 가 복잡 해 보 여서 잘 모 르 겠 어 요.
    나중에 직접 사용through2을 시 도 했 는데 정상적으로 작 동 하 는 것 을 발견 했다.
    coffeestream = though2.obj()
    stream.write buffer
    stream.end()
    

    문서 가 보 낸 용 도 는.obj(fn)중 에write함수 가 있 을 거 예요.
    구조 파일 데이터
    또 다른 문제,requirejs모듈,out함수 가 전달 하 는 매개 변 수 는 실제 대응emit하 는 데이터 상단 의 코드 로 두 개의 함수 가 있 고 한 처리emit,다른 처리endemit이지 만requirejs모든 파일 을 읽 어야 하기 때문에 사실상 최종 호출 에 불과 하 다.
    한참 동안 찾 았 지만gulp.File찾 지 못 했 습 니 다.gulp 소스 룸 에서 파일 대상 의 코드 를 찾 아 보 았 습 니 다.마지막 으로vinyl문서 에서 비슷 한 내용 을 찾 아 보 았 습 니 다.https://github.com/wearefractal/vinyl 문서 의 인자 가 더 많 습 니 다.저 는 이러한 쓰기 방법 을 통 해 파일 데 이 터 를 성공 적 으로 만 들 었 습 니 다.
    coffeevinyl = require 'vinyl'
    new vinyl
      path: 'main.js'
      contents: new Buffer 'data'
    

    Stream 은 저 에 게 아직 낯 설 습 니 다.앞으로 천천히 강화 할 방법 을 생각해 보 세 요.위의 두 가지 에 대해 더 잘 알 고 있다 면 댓 글로 알려 주세요.

    좋은 웹페이지 즐겨찾기