導航:首頁 > 源碼編譯 > es6編譯頁面

es6編譯頁面

發布時間:2023-04-07 12:27:22

❶ 白鷺發布ES6時uglify-js不支持es6的解決方案

試了一下發布ES6,結果報錯,不支持uglify-js,需要換插件。從論壇中找到如下鏈接:

https://bbs.egret.com/forum.php? ... 52516&highlight=es6

但是看了一下發現並不是很合適,因為Egret中有不少地方用到了uglify-js,換起來有點麻煩。

這里我直接使用uglify-js的harmony分支uglify-es,源在github上:

https://github.com/mishoo/UglifyJS2/tree/harmony

按以下步驟操作:

1.按上面鏈接的文檔進行安裝,我直接npm安裝的,沒有替換Egret集成的uglify-js

2.安裝完後找到Egret庫中的utils.js,我的悄晌Mac目錄在:/Users/xxxxxx/Library/Application Support/Egret/engine/5.2.14/tools/lib/utils.js

3.打開utils.js進行修改:

找到:

修改為:

完成第一步,此處使用剛安裝好的庫

然後找到:

修改為:

此處是為了處理egret publish的時候會引起的編譯錯誤。

4.執行egret publis,可以正常發布。

目前我這么處理還沒問題,不知道是否有隱藏問題,感謝指正。

ES6越來越廣泛,期待Egret官方能夠把常用集成庫都處理成支持ES6的版本。

5.備註:

uglify在對第三方庫生成.min.js時,如果想集成到Egret中,不要加參數,直接輸出即可。示例如下:

1.錯誤寫法,能正常debug能正常release但不能正常運行:

2.正確寫法,全部散激正常:

** 補充:如果編譯目標可為es5,忽略以上全部說明,直接在沖運襪lib中添加es6配置即可,如下

❷ React | 使用webpack構建React項目

配置 React 項目,需要完成的工作:

1、編譯 jsx,es6,scss 等資源

2、褲閉自動引入靜態資源到 html 頁面

3、實時編譯和刷新瀏覽器

4、按指定模塊化規范自動包裝模塊

5、自動給 css 添加瀏覽器內核前綴

6、按需打包合並 js、css

根據 webpack 文檔編寫最基本的 webpack 配置,直接使用 node api 的方式

/* webpack.config.js */

var webpack= require( 'webpack' );

// 輔助函數  var utils= require( './utils' );

var fullPath=utils.fullPath;

var pickFiles=utils.pickFiles;

// 項磨大目根路徑  var ROOT_PATH=fullPath( '../' );

// 項目源碼路徑胡游裂  var SRC_PATH=ROOT_PATH+ '/src' ;

// 產出路徑  var DIST_PATH=ROOT_PATH+ '/dist' ;

// 是否是開發環境  var __DEV__= process.env. NODE_ENV !== 'proction' ;

// conf

var alias=pickFiles({

id :/(conf\/[^\/]+).js$/,

pattern :SRC_PATH+ '/conf/*.js'

});

// components

alias= Object.assign(alias,pickFiles({

id :/(components\/[^\/]+)/,

pattern :SRC_PATH+ '/components/*/index.js'

}));

// recers

alias= Object.assign(alias,pickFiles({

id :/(recers\/[^\/]+).js/,

pattern :SRC_PATH+ '/js/recers/*'

}));

// actions

alias= Object.assign(alias,pickFiles({

id :/(actions\/[^\/]+).js/,

pattern :SRC_PATH+ '/js/actions/*'

}));

var config= {

context :SRC_PATH,

entry : {

app : [ './pages/app.js' ]

},

output : {

path :DIST_PATH,

filename : 'js/bundle.js'

},

mole : {},

resolve : {

alias :alias

},

plugins : [

new webpack.DefinePlugin({

// http://stackoverflow.com/questions/30030031/passing-environment-dependent-variables-in-webpack

"process.env.NODE_ENV" : JSON .stringify(process.env. NODE_ENV || 'development' )

})

]

};

mole.

exports =config;

/* webpack.dev.js */

var webpack= require( 'webpack' );

var WebpackDevServer= require( 'webpack-dev-server' );

var config= require( './webpack.config' );

var utils= require( './utils' );

var PORT=8080;

var HOST=utils.getIP();

var args= process.argv;

var hot=args.indexOf( '--hot' ) > -1;

var deploy=args.indexOf( '--deploy' ) > -1;

// 本地環境靜態資源路徑  var localPublicPath= 'http://' +HOST+ ':' +PORT+ '/' ;

config.output. publicPath =localPublicPath;

config.entry.app.unshift( 'webpack-dev-server/client?' +localPublicPath);

new WebpackDevServer(webpack(config), {

hot :hot,

inline : true ,

compress : true ,

stats : {

chunks : false ,

children : false ,

colors : true

},

// Set this as true if you want to access dev server from arbitrary url.

// This is handy if you are using a html5 router.

historyApiFallback : true ,

}).listen(

PORT,HOST, function () {

console .log(localPublicPath);

});

編譯 jsx、es6、scss 等資源:

● 使用 bael 和 babel-loader 編譯 jsx、es6

● 安裝插件: babel-preset-es2015 用於解析 es6

● 安裝插件:babel-preset-react 用於解析 jsx

// 首先需要安裝 babel

$ npm i babel-core

// 安裝插件

$ npm i babel-preset-es2015babel-preset-react

// 安裝 loader

$ npm i babel-loader

在項目根目錄創建 .babelrc 文件:

{

"presets" : [ "es2015" , "react" ]

}

在 webpack.config.js 里添加:

// 使用緩存 var CACHE_PATH = ROOT_PATH + '/cache' ;

// loaders

config.mole. loaders = [];

// 使用 babel 編譯 jsx 、 es6

config.mole. loaders .push({

test :/\.js$/,

exclude :/node_moles/,

include : SRC_PATH,

// 這里使用  loaders ,因為後面還需要添加  loader

loaders : [ 'babel?cacheDirectory=' + CACHE_PATH ]

});

接下來使用 sass-loader 編譯 sass:

$ npm i sass-loader node-sasscss-loader style-loader

●css-loader 用於將 css 當做模塊一樣來 import

●style-loader 用於自動將 css 添加到頁面

在 webpack.config.js 里添加:

// 編譯  sass

config.mole. loaders .push({

test :/\.(scss|css)$/,

loaders : [ 'style' , 'css' , 'sass' ]

});

自動引入靜態資源到相應 html 頁面

● 使用 html-webpack-plugin

$ npm i html-webpack-plugin

在 webpack.config.js 里添加:

// html  頁面  var HtmlwebpackPlugin= require( 'html-webpack-plugin' );

config.

plugins .push(

new HtmlwebpackPlugin({

filename : 'index.html' ,

chunks : [ 'app' ],

template : SRC_PATH + '/pages/app.html'

})

);

打包合並 js、css

webpack 默認將所有模塊都打包成一個 bundle,並提供了 Code Splitting 功能便於我們按需拆分。在這個例子里我們把框架和庫都拆分出來:

在 webpack.config.js 添加:

config.entry. lib = [

'react' , 'react-dom' , 'react-router' ,

'rex' , 'react-rex' , 'rex-thunk'

]

config.output. filename = 'js/[name].js' ;

config.

plugins .push(

new webpack.optimize.CommonsChunkPlugin( 'lib' , 'js/lib.js' )

);

// 別忘了將  lib  添加到  html  頁面

// chunks: ['app', 'lib']

❸ 怎麼快速上手JavaScript中的ES6,ES6中的解構,運算符,類,繼承模塊化 有什麼簡單的理解

模塊化在項目中十分的重要,一個復雜的項目肯定有很多相似的功能模塊,如果每次都需要重新編寫模塊肯定既費時又耗力。但是引用別人編寫模塊的前提是要有統一的「打開姿勢」,如果每個人有各自的寫法,那麼肯定會亂套,下面介紹幾種JS的模塊化的規范。
一:模塊化進程一:script標簽
這是最原始的 JavaScript 文件載入方式,如果把每一個文件看做是一個模塊,那麼他們的介面通常是暴露在全局作用域下,也就是定義在 window 對象中,不同模塊的介面調用都是一個作用域中,一些復雜的框架,會使用命名空間的概念來組織這些模塊的介面。
缺點:
1、污染全局作用域
2、開發人員必須主觀解決模塊和代碼庫的依賴關系
3、文件只能按照script標簽的書寫順序進行載入
4、在大型項目中各種資源難以管理,長期積累的問題導致代碼庫混亂不堪
二:模塊化進程二:CommonJS規范
該規范的核心思想是允許模塊通過require方法來同步載入所要依賴的其他模塊,然後通過 exports 或 mole.exports 來導出需要暴露的介面。
require("mole");
require("../file.js");
exports.doStuff = function(){};
mole.exports = someValue;
優點:
1、簡單並容易使用
2、伺服器端模塊便於重用
缺點:
1、同步的模塊載入方式不適合在瀏覽器環境中,同步意味著阻塞載入,瀏覽器資源是非同步載入的
2、不能非阻塞的並行載入多個模塊
mole.exports與exports的區別
1、exports 是指向的 mole.exports 的引用
2、mole.exports 初始值為一個空對象 {},所以 exports 初始值也是 {}
3、require() 返回的是 mole.exports 而不是 exports
exports示例:
// app.js
var circle = require('./circle');
console.log(circle.area(4));
// circle.js
exports.area = function(r){
return r * r * Math.PI;
}
mole.exports示例:
// app.js
var area = require('./area');
console.log(area(4));
// area.js
mole.exports = function(r){
return r * r * Math.PI;
}
錯誤的情況:
// app.js
var area = require('./area');
console.log(area(4));
// area.js
exports = function(r){
return r * r * Math.PI;
}
其實是對 exports 進行了覆蓋,也就是說 exports 指向了一塊新的內存(內容為一個計算圓面積的函數),也就是說 exports 和 mole.exports 不再指向同一塊內存,也就是說此時 exports 和 mole.exports 毫無聯系,也就是說 mole.exports 指向的那塊內存並沒有做任何改變,仍然為一個空對象{},也就是說area.js導出了一個空對象,所以我們在 app.js 中調用 area(4) 會報 TypeError: object is not a function 的錯誤。
總結:當我們想讓模塊導出的是一個對象時, exports 和 mole.exports 均可使用(但 exports 也不能重新覆蓋為一個新的對象),而當我們想導出非對象介面時,就必須也只能覆蓋 mole.exports 。
三:模塊化進程三:AMD規范
由於瀏覽器端的模塊不能採用同步的方式載入,會影響後續模塊的載入執行,因此AMD(Asynchronous Mole Definition非同步模塊定義)規范誕生了。
AMD標准中定義了以下兩個API
1、require([mole], callback);
2、define(id, [depends], callback);
require介面用來載入一系列模塊,define介面用來定義並暴露一個模塊。
示例:
define("mole", ["dep1", "dep2"], function(d1, d2){
return someExportedValue;
});
require(["mole", "../file"], function(mole, file){ /* ... */ });
優點:
1、適合在瀏覽器環境中非同步載入模塊
2、可以並行載入多個模塊
缺點:
1、提高了開發成本,代碼的閱讀和書寫比較困難,模塊定義方式的語義不順暢
2、不符合通用的模塊化思維方式,是一種妥協的實現
四:模塊化進程四:CMD規范
CMD(Common Mole Definition)規范和AMD很相似,盡量保持簡單,並與CommonJS和Node.js的 Moles 規范保持了很大的兼容性。在CMD規范中,一個模塊就是一個文件。
示例:
define(function(require, exports, mole){
var $ = require('jquery');
var Spinning = require('./spinning');
exports.doSomething = ...
mole.exports = ...
})
優點:
1、依賴就近,延遲執行
2、可以很容易在 Node.js 中運行
缺點:
1、依賴 SPM 打包,模塊的載入邏輯偏重
AMD和CMD的區別
AMD和CMD起來很相似,但是還是有一些細微的差別,讓我們來看一下他們的區別在哪裡:
1、對於依賴的模塊,AMD是提前執行,CMD是延遲執行。
2、AMD推崇依賴前置;CMD推崇依賴就近,只有在用到某個模塊的時候再去require。看代碼:
// AMD
define(['./a', './b'], function(a, b){ // 依賴必須一開始就寫好
a.doSomething()
// 此處略去 100 行
b.doSomething()
...
});
// CMD
define(function(require, exports, mole){
var a = require('./a')
a.doSomething()
// 此處略去 100 行
var b = require('./b')
// 依賴可以就近書寫
b.doSomething()
// ...
});
3、AMD 的 API 默認是一個當多個用,CMD 的 API 嚴格區分,推崇職責單一。
五:模塊化進程五:ES6模塊化
EcmaScript6標准增加了JavaScript語言層面的模塊體系定義。ES6 模塊的設計思想,是盡量的靜態化,使得編譯時就能確定模塊的依賴關系,以及輸入和輸出的變數。CommonJS和AMD模塊,都只能在運行時確定這些東西。
在 ES6 中,我們使用export關鍵字來導出模塊,使用import關鍵字引用模塊。需要說明的是,ES6的這套標准和目前的標准沒有直接關系,目前也很少有JS引擎能直接支持。因此Babel的做法實際上是將不被支持的import翻譯成目前已被支持的require。
盡管目前使用import和require的區別不大(本質上是一回事),但依然強烈推薦使用import關鍵字,因為一旦JS引擎能夠解析ES6的import關鍵字,整個實現方式就會和目前發生比較大的變化。如果目前就開始使用import關鍵字,將來代碼的改動會非常小。
示例:
import "jquery";
export functiondoStuff(){}
mole "localMole" {}
優點:
1、容易進行靜態分析
2、面向未來的 EcmaScript 標准
缺點:
1、原生瀏覽器端還沒有實現該標准
2、全新的命令字,新版的 Node.js才支持

❹ 為什麼我使用gulp-babel不能將es6編譯成es5

需要安裝babel-preset-es2015插件,才能把es6編譯成es5
npm install --save-dev babel-preset-es2015

在gulpfile.js中增加presets
var gulp = require("gulp");
var babel = require("gulp-babel");

gulp.task("default", function () {
return gulp.src("src/app.js")
.pipe(babel({
presets: ['es2015']
}))
.pipe(gulp.dest("dist"));
});

❺ 如何讓瀏覽器支持ES6中的import和export語法

然而, Babel默認只轉換新的JavaScript句法(syntax),而不轉換新的API,比如Iterator、Generator、Set、Maps、Proxy、Reflect、Symbol、Promise等全局對象,以及一些定義在全局對象上的方法(比如Object.assign)都不會轉碼。而且像import和export這兩個命令現在在任何瀏覽器中都是不支持的, 同時babel也無法將其轉換為瀏覽器支持的ES5, 原因在於:
babel只是個翻譯,假設a.js 里 import 了 b.js, 對a.js進行轉碼,只是翻譯了a.js,並不會把b.js的內容給讀取合並進來, 如果想在最終的某一個js里,包含 a.js,b.js 的代碼,那就需要用到打包工具
所以我在這里講解一下如何使用webpack工具將帶有import和export語法的JS文件, 通過打包工具生成所有瀏覽器都支持的單個JS文件.
1. 下載node.js和webpack
Node.js是一個基於Chrome JavaScript運行時建立的平台, 用於方首凱便地搭建響應速度快、易於擴展的網路應用。可以說就是伺服器端的JS. webpack是一個打包工具, 而它是依賴於node.js運行的.
下載node.js可以通過官網: http://nodejs.cn/download/
具體的安裝步驟網上可以搜到很多, 這里不再贅述. 安裝完畢後打開node.js自帶的命令行工具
這里寫圖片描述
然後輸入如下命令全局安裝webpack工具
npm install -g webpack
接著通過命令行工具定位到你的工程文件的根目錄下, 再次安裝webpack到你的工程中
npm install webpack
2. 編寫webpack.config.js文件
在根目錄下創建webpack.config.js, 這個文件是用來描述一些要使用webpack工具進行打包的配置信息, 文件內容如下:
這里寫圖片描述
通過該文件可以使用webpack打包工具, webpack會從import.js進入, 對該文件中的內容進行編譯並打包, 最終會在dist目錄下生成打包好的文件bundle.js, 編譯打包過程空彎中用到的工具在mole對象的loaders中聲明, 這里使用了babel-loader來對JS文件進行編譯(包括從ES6轉換為ES5以及打包)
3. 創建import.js
創建一個import.js, 內容如下:
這里寫圖片描述
在該文件中通過ES6語法import從export.js中引入firstName和lastName變數. 並且通過console.log將引入的兩個變數列印到控制台.
4. 創建export.js
這里寫圖片描述
在該文件中通過ES6語法export將文件中的幾個變數作為模塊輸出給別的文件引用.
5. 創建HTML文件
在HTML文件中直接將webpack最終打包生成的bundle.js文件引入即可, 因為通過webpack工具已經將export.js和import.js的所有內容都打包到一個文件bundle.js中了, 因此在HTML文件中引入該文件即可以將兩個JS文件中的代碼都執行.
這里寫圖片描述
6. 配置.babelrc文件
在工程文件的根目錄下創建一個.babelrc文件(注意前面有個點), 這個文件是用來描述我要根據什麼樣的規則、或者是將JS文件編譯成什麼版本的文件(比如說ES5). 該文件的內容如下:
這里寫圖片描述
7. 下載相關依賴模塊
方式1: 可以像下面這樣, 直接在項目根目錄下創建一個package.json文件, 並且在文件中指定devDependencies對象, 在該對象中寫上我編譯及打包中所要使用到的依賴模塊, 圖片中的webpack就是用於打包的工具, 而其他的以babel開頭的選項都是編譯JS文件並打包所需要用到的依賴模塊.
這里寫圖片描述
創建好package.json文件後, 在命令行中輸入
npm install
npm工具就會根據該文件中devDependencies選項下載對應的依賴模塊.
方式2(推薦): Ctrl+R打開運行, 然後輸入cmd打開命令行工具, 通過命令行工斗芹悶具一個個安裝, 這樣可以直接通過npm去下載依賴模塊最新的穩定的版本, 同時也不需要自己去記這些模塊的版本號
npm install babelnpm install babel-clinpm install babel-corenpm install babel-loadernpm install babel-preset-es2015
8. 使用 webpack打包
使用命令行工具定位到項目的根目錄下, 然後輸入如下指令
webpack
等待一會兒就會發現工程文件的目錄下多了一個dist文件夾, 裡面放著的就是打包好了的bundle.js文件, 在HTML文件中通過下面的代碼引入js文件
<script src="dist/bundle.js"></script>
然後在瀏覽器上運行html文件, 使用F12打開開發者工具, 就可以看到console選項中輸出兩行記錄」Micheal」, 「Jackson」

❻ 解決 Vue 瀏覽器兼容 edge safari ie 問題

最近做的一個Vue項目,遇到了在Edge瀏覽器,Safari(version: 9.xx)瀏覽器上打不開的問題。分別有以下報錯:
Safari Error:

Edge Error:

const 和 ...(spread operator)語法都是ES6語法,這說明在Edge和safari 9 瀏覽器下都不支持ES6語法。帶著這個判斷,我去查了一下es6的瀏覽器支禪蠢棗持情況,果不其然,safari10以下和Edge14以下 和 IE 都不支持es6語法,具體ES6瀏覽器支持情況請參考以下表格:
Browser Support for ES6 (ECMAScript 2015)

找到問題的原因在於瀏覽器不支持ES6語法,所檔帆以需要使用Babel去編譯。接下來是如何在前端項目賀拆中配置babel,使能夠將ES6編譯成ES5語法:

注意 : 所有使用到了ES6語法的文件都需要配置在以上的 mole> rules> include 裡面。
重新運行項目,刷新瀏覽器發現頁面恢復正常。

這篇文章涉及到的前端技術包括: ES6的新特性 babel的配置 ,等等。感興趣的同學可以查看我的其他文章或者自行學習。
參考文獻: From ES5 to ESNext

閱讀全文

與es6編譯頁面相關的資料

熱點內容
單片機的功能模塊 瀏覽:769
安卓手機如何錄制視頻長時間 瀏覽:283
安全問題app哪個好 瀏覽:445
壓縮水會變冰嗎 瀏覽:526
小說配音app哪個靠譜 瀏覽:820
編譯iso 瀏覽:944
照片生成pdf格式 瀏覽:194
病歷轉pdf 瀏覽:835
雲伺服器配硬體 瀏覽:978
伺服器10k什麼意思 瀏覽:21
pdfeditor漢化 瀏覽:884
新科學pdf 瀏覽:746
現在還有c語言編譯嗎 瀏覽:675
哪裡買到單片機 瀏覽:480
linux文件打開數量 瀏覽:510
編譯原理中什麼是l屬性文法 瀏覽:372
硬碟加密時出現的問題 瀏覽:61
如何退域命令 瀏覽:108
看書的app哪裡看 瀏覽:291
伺服器怎麼調大 瀏覽:4