typescriptで書いたコードをwebpackでjsファイルとして出力させています。
app.js→アプリ独自のjs
vendor.js→importで読み込んだライブラリをまとめたjs
jsを出力した後でios8のsafariで確認すると、次のようなメッセージが表示されていました。
SyntaxError: Unexpected keyword 'const'. Const declarations are not supported in strict mode.
vendor.jsでconstが出力されていたのが原因のようです。
app.jsではエラーは発生していませんでした。
constをvarとして出力させるにはどうしたらよいのでしょうか。
js
1■webpack.config.js 2const path = require("path"); 3const HtmlWebpackPlugin = require('html-webpack-plugin'); 4 5module.exports = { 6 mode: "development", 7 8 entry: { 9 app: './src/ts/index.ts', 10 }, 11 output: { 12 filename: '[name].js', 13 chunkFilename: 'vendor.js', 14 path: path.join(__dirname, '/dist/js'), 15 }, 16 module: { 17 rules: [{ 18 test: /.ts$/, 19 use: "ts-loader" 20 }] 21 }, 22 optimization: { 23 splitChunks: { 24 cacheGroups: { 25 vendor: { 26 test: /node_modules/, 27 name: 'vendor', 28 chunks: 'initial', 29 enforce: true 30 } 31 }, 32 33 } 34 }, 35 resolve: { 36 extensions: [".ts", ".js"] 37 }, 38 devServer: { 39 disableHostCheck: true, 40 contentBase: path.join(__dirname, "dist/"), 41 compress: true, 42 port: 8080, 43 open: true 44 }, 45 devtool: "source-map", 46 plugins: [ 47 new HtmlWebpackPlugin({ 48 template: "src/index.html" 49 }) 50 ] 51};
json
1■tsconfig.json 2{ 3 "compilerOptions": { 4 "target": "es5", 5 "module": "CommonJS", 6 "lib": ["dom", "es5"], 7 "baseUrl": "./src/ts", 8 "outDir": "./dist/js", 9 "allowJs": true, 10 "alwaysStrict": true, 11 "esModuleInterop": true, 12 "forceConsistentCasingInFileNames": true, 13 "isolatedModules": true, 14 "moduleResolution": "node", 15 "noEmit": false, 16 "noFallthroughCasesInSwitch": true, 17 "noUnusedLocals": false, 18 "noUnusedParameters": false, 19 "removeComments": true, 20 "skipLibCheck": true, 21 "strict": true, 22 "noImplicitAny": false, 23 "strictNullChecks": false 24 }, 25 "compileOnSave": true, 26 "include": [ 27 "src/ts/**/*.ts" 28 ], 29 "exclude": [ 30 "node_modules", 31 ], 32}
json
1■package.json 2{ 3 "name": "sample", 4 "version": "1.0.0", 5 "description": "", 6 "main": "index.js", 7 "scripts": { 8 "test": "echo \"Error: no test specified\" && exit 1", 9 "build": "webpack", 10 "start": "webpack-dev-server" 11 }, 12 "author": "", 13 "license": "ISC", 14 "dependencies": { 15 "pixi.js": "^5.2.1" 16 }, 17 "devDependencies": { 18 "html-loader": "^1.1.0", 19 "html-webpack-plugin": "^4.0.4", 20 "ts-loader": "^6.2.2", 21 "typescript": "^3.8.3", 22 "webpack": "^4.42.1", 23 "webpack-cli": "^3.3.11", 24 "webpack-dev-server": "^3.10.3" 25 } 26}
typescript
1■index.ts 2import * as PIXI from "pixi.js"; 3const loader: PIXI.Loader = PIXI.Loader.shared; 4alert("load!");
Windowsで実施
Node.jsのバージョン:
v.10.10.0
npmのバージョン:
6.4.1
その設定で試してみましたが、const は出力されないですね。typescript のコードと、それをどうやってビルドしたのか教えてください。
gulpを経由してWebpackを起動しています。
vendor.js内で./node_modules/ismobilejs/esm/isMobile.jsというモジュールが読み込まれて、その中でconstが定義されたままで出力されているようです。
なるほど…。自分は webpack-cli を入れてそれ経由でした。gulp は知らないのでごめんなさい。
webpack-cliであれば、index.tsの内容であっても、vendor.jsにconstは出力されないといった認識でよいでしょうか。
もちろん設定次第ですが、質問文の webpack.config.js では const は出力されませんでした。
「gulpを経由してWebpackを起動」ということは webpack の出力をさらに gulp が処理してるんですかね。gulp もちゃんと設定すれば大丈夫でしょうけど…。
gulpをやめてwebpackのみの処理に変更し、npm run startを実行したのですが、まだconstが出力されてしまいます。
vendor.jsの41345行目付近です。
回答1件
あなたの回答
tips
プレビュー