首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >添加@wordpress/components依赖项可将gulp/browserify构建时间提高1500%

问添加@wordpress/components依赖项可将gulp/browserify构建时间提高1500%
EN

Stack Overflow用户
提问于 2021-10-08 00:20:42
回答 1查看 28关注 0票数 0

我正在尝试在我的ReactJS项目中使用WordPress依赖项。出于某种奇怪的原因,从@wordpress/components依赖项导入任何组件都会将我的构建时间从694ms增加到9.42s。这使得在我的代码中使用手表几乎是不可能的。

我在构建过程中使用了babelify / browserify,如下所示。

gulfile.js

代码语言:javascript
复制
var argv = require('yargs').argv;
var gulpif = require('gulp-if');
var gulp = require('gulp');
var browserify = require('browserify');         
var babelify = require('babelify');
var source = require('vinyl-source-stream');
var uglify = require('gulp-uglify');
var buffer = require('vinyl-buffer');

var project = {
    scriptSource: './src/react-designer.js',
    outputFile: 'react-designer.js',
    outputDir: './dist/'
}

/**
 * Build an output file. Babelify is used to transform 'jsx' code to JavaScript code. 
 **/
gulp.task("build", function(){
    var options = {
        entries: project.scriptSource,          // Entry point
        extensions: [".js"],                    // consider files with these extensions as modules 
        debug: argv.production ? false : true,  // add resource map at the end of the file or not
        paths: ["./src/"]                       // This allows relative imports in require, with './src/' as root
    };

    var babelifyOpts = {
        sourceMaps: !argv.production,
        presets: [
            "@babel/preset-env",
            "@babel/preset-react"
        ],
        plugins: [
            [ "@babel/plugin-transform-react-jsx" ]
        ]
    }

    return browserify(options)
        .transform( babelify, babelifyOpts )
        .bundle()
        .pipe( source( project.outputFile ) )
        .pipe(gulpif(argv.production, buffer()))    // Stream files
        .pipe(gulpif(argv.production, uglify()))
        .pipe(gulp.dest("./dist/"));
});

package.json

代码语言:javascript
复制
{
    "version": "1.0.0-alpha.0",
    "description": "",
    "author": "NOKNOK Studios",
    "files": [
        "dist/"
    ],
    "dependencies": {
        "@wordpress/components": "^17.0.0",
        "ntc": "^0.0.1",
        "react": "^17.0.2"
    },
    "private": true,
    "devDependencies": {
        "@babel/core": "^7.15.5",
        "@babel/plugin-transform-react-jsx": "^7.14.9",
        "@babel/plugin-transform-react-jsx-self": "^7.14.9",
        "@babel/preset-env": "^7.15.6",
        "@babel/preset-react": "^7.14.5",
        "babelify": "^10.0.0",
        "browserify": "^17.0.0",
        "git": "^0.1.5",
        "gulp": "^4.0.2",
        "gulp-bump": "^3.2.0",
        "gulp-filter": "^7.0.0",
        "gulp-sass": "^5.0.0",
        "gulp-sourcemaps": "^3.0.0",
        "gulp-tag-version": "^1.3.1",
        "gulp-uglify": "^3.0.2",
        "node-sass": "^6.0.1",
        "sass": "^1.41.0",
        "vinyl-buffer": "^1.0.1",
        "vinyl-source-stream": "^2.0.0"
    }
}

react-designer.js

代码语言:javascript
复制
import Component from 'react';
import { Button } from '@wordpress/components';

class Designer extends Component {


    render() {
        return <Button>Click Me!</Button>;
    }

}

我意识到构建时间的增加可能是由于@wordpress/组件使用的依赖项数量所致。如果可能的话,我不想交换这个依赖。

关于如何优化我的构建过程以在2秒内运行,有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-08 01:07:37

事实证明我是个笨蛋,Watchify是"practically a must“,因为它缓存了被监视的构建之间的依赖关系。使用本地的吞咽手表是我的问题。

更新的gulpfile.js

代码语言:javascript
复制
var argv        = require( 'yargs' ).argv;
var gulpif      = require( 'gulp-if' );
var gulp        = require( 'gulp' );
var watchify    = require( 'watchify' );
var browserify  = require( 'browserify');         
var babelify    = require( 'babelify' );
var source      = require( 'vinyl-source-stream' );
var uglify      = require( 'gulp-uglify' );
var buffer      = require( 'vinyl-buffer' );
var assign      = require( 'lodash.assign' );
var sourcemaps = require('gulp-sourcemaps');
var log         = require( 'gulplog' )

var project = {
    sourceDir: './src/',
    scriptSource: './src/react-designer.js',
    outputFile: 'react-designer.js',
    outputDir: './dist/'
}

var options = assign({}, watchify.args, {
    entries: project.scriptSource,          // Entry point
    extensions: [ ".js" ],                  // consider files with these extensions as modules 
    debug: argv.production ? false : true,  // add resource map at the end of the file or not
    paths: [ project.sourceDir ],           // This allows relative imports in require, with './src/' as root
});

var babelifyOpts = {
    sourceMaps: argv.production ? false : true,
    presets: [
        "@babel/preset-env",
        "@babel/preset-react"
    ],
    plugins: [
        [ 
            "@babel/plugin-transform-react-jsx"
        ]
    ]
}

function bundle( bundler ) {
    bundler = bundler.transform( babelify, babelifyOpts )

    bundler.on( 'update', () => rebundle( bundler) );
    bundler.on( 'log', log.info );

    return rebundle( bundler );
}

function rebundle( bundler ) {
    return bundler
        .bundle()
        .on('error', log.error.bind(log, 'Browserify Error'))

        .pipe( source( project.outputFile ) )
        .pipe( buffer() )    // Stream files
        .pipe( gulpif( ! argv.production, sourcemaps.init( { loadMaps: true } ) ) ) // loads map from browserify file
        .pipe( gulpif( argv.production, uglify() ) )

        .pipe( gulpif( ! argv.production, sourcemaps.write( './' ) ) ) // writes .map file
        .pipe( gulp.dest( project.outputDir ) );
}

gulp.task( 'build:js', () => bundle( browserify( options ) ) );
gulp.task( 'watch:js', () => bundle( watchify( browserify( options ) ) ) );
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69489137

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档