我從其他文件導入(ECMAScript 2015)類時遇到問題。 我index.js北京時間很短:ECMAScript 2015和gulp-babel:導入類
import {Viewer3D} from '/src/viewer3d.js';
var viewer3D = new Viewer3D();
viewer3D.foo();
,並通過index.html中正常調用,但隨後產生的:
遺漏的類型錯誤:無法讀取屬性「Viewer3D」的未定義
當試圖調用Viewer3D構造函數。
現在,如果我將Viewer3D的源複製到index.js(刪除導入行),所有工作正常。
但是我怎樣才能使用多個JS源文件?
非常感謝您的幫助。
我.babelrc:
{
"presets": ["es2015"],
"plugins": [
"transform-regenerator",
"transform-object-rest-spread",
"syntax-async-functions",
"transform-es2015-modules-umd"
]
}
我gulpfile.js腳本的相關部分:
var sourcemaps = require('gulp-sourcemaps');
var babel = require('gulp-babel');
var concat = require('gulp-concat');
var gulp = require('gulp');
var runSequence = require('run-sequence');
var changed = require('gulp-changed');
var plumber = require('gulp-plumber');
...
var source_path = "./src/*.js";
...
gulp.task('build-system', function()
{
return gulp.src(source_path)
.pipe(sourcemaps.init())
.pipe(babel())//Run through babel
.pipe(sourcemaps.write('.', {
includeContent: false,
sourceRoot: function(file) {
return path.relative(file.path, __dirname);
}
}))
.pipe(gulp.dest("dist"));
});
我的package.json的相關部分:
"dependencies": {
"babel": "^6.5.2",
"browser-sync": "^2.12.10",
"del": "^2.2.0",
"gulp": "^3.9.1",
"gulp-babel": "^6.1.2",
"gulp-changed": "^1.3.0",
"gulp-live-server": "0.0.29",
"gulp-sourcemaps": "^1.6.0",
"proxy-middleware": "^0.15.0",
"run-sequence": "^1.2.1",
"three.js": "^0.77.1"
},
"devDependencies": {
"babel-plugin-transform-es2015-modules-commonjs": "^6.8.0",
"babel-plugin-transform-es2015-modules-umd": "^6.8.0",
"babel-plugin-transform-object-rest-spread": "^6.8.0",
"babel-plugin-transform-regenerator": "^6.9.0",
"babel-preset-es2015": "^6.9.0"
}
我最小的viewer3D.js:
export class Viewer3D {
constructor()
{
console.warn('Called Viewer3D constructor NOW.');
}
foo()
{
console.warn('foo called');
}
}
注: 當然,我並沒有捆綁在我gulpfile.js腳本的源文件,他們只是編譯dist文件夾,並通過
gulp.task('serve', ['build'], function() {
browserSync({
online: false,
open: false,
port: 9010,
server: {
baseDir: "dist",
middleware: function (req, res, next)
{
res.setHeader('Access-Control-Allow-Origin', '*');
next();
}
}
});
});
服務注2:
我在這裏發現部分解決方案(使用webpack):
https://github.com/tiagorg/gulp-es6-webpack-example
但是沒有源代碼...所以沒有調試是可能的...。
你能告訴我們你的viewer3d.js嗎? – QoP
我剛更新了上面的代碼。 – Trantor