How to compile a project properly with Babel and Grunt

前端 未结 3 1466
情话喂你
情话喂你 2021-01-30 11:26

I\'m trying to play with Babel, but it doesn\'t work well for me.

My project is simple

|-project/
|---src/
|-----index.html
|-----main.js
|-----module.js         


        
3条回答
  •  暗喜
    暗喜 (楼主)
    2021-01-30 11:26

    To expand on veg_prog's answer, you should use something like Browserify if you want to organize your code into modules. Browserify can be used with Grunt via grunt-browserify, and Babel can be used with Browserify via babelify.

    I've tweaked some of your files to show you how it can be done:

    index.html

    
    
    
      
      Test
      
    
    
      

    Simple html file.

    main.js

    import "babelify/polyfill"; // Needed for Babel's experimental features.
    import * as math from "./module";
    
    async function anwser() {
      return 42;
    }
    
    (function main() {
      anwser().then((v) => {
        console.info(v);
      });
    
      console.log(math.sum(5, 5));
    })();
    

    Gruntfile.js

    module.exports = function(grunt) {
    
      grunt.initConfig({
        browserify: {
          dist: {
            options: {
              transform: [["babelify", { "stage": 0 }]]
            },
            files: {
              "build/bundle.js": "src/main.js"
            }
          }
        },
        htmlmin: {
          dist: {
            options: {
              removeComments: true,
              collapseWhitespace: true
            },
            files: [{
              "expand": true,
              "cwd": "src/",
              "src": ["**/*.html"],
              "dest": "build/",
              "ext": ".html"
            }]
          }
        },
        watch: {
          scripts: {
            files: "src/*.js",
            tasks: ["browserify"]
          },
          html: {
            files: "src/*.html",
            tasks: ["htmlmin"]
          }
        }
      });
    
      grunt.loadNpmTasks("grunt-browserify");
      grunt.loadNpmTasks("grunt-contrib-watch");
      grunt.loadNpmTasks("grunt-contrib-htmlmin");
    
      grunt.registerTask("default", ["browserify", "htmlmin"]);
    };
    

    package.json

    {
      "devDependencies": {
        "babelify": "6.0.1",
        "grunt": "0.4.5",
        "grunt-browserify": "3.6.0",
        "grunt-contrib-htmlmin": "0.4.0",
        "grunt-contrib-watch": "0.6.1"
      }
    }
    

提交回复
热议问题