我最终使用了 webpack 来实现这一点。支持@zerkms。这是一项正在进行的工作,可以更好地优化。
安装:
- Install webpack,我个人是全局安装的。 (不确定如何配置 Phpstorm 使用 webpack,似乎没有直接内置的系统)
Go to src > XBundle > Resources > private > typescript
npm init -y
- 安装开发依赖项:
npm install --save-dev awesome-typescript-loader
and npm install --save-dev typescript
边注:
@Morgan Touverey Quilling,建议在本地安装 webpack,你的选择:
npm install --save-dev webpack
配置:
这是我的文件夹结构:
├── XBundle/
│ ├── Controller
│ ├── Resources
│ │ ├── config
│ │ ├── private
│ │ │ ├── typescript
│ │ │ │ ├── components
│ │ │ │ │ ├── auth
│ │ │ │ │ │ ├── auth.component.ts
│ │ │ │ │ ├── search
│ │ │ │ │ │ ├── search.component.ts
│ │ │ │ ├── services
│ │ │ │ │ ├── http.service.ts
│ │ │ │ ├── node_modules
│ │ │ │ ├── package.json
│ │ │ │ ├── webpack.config.js
│ │ │ │ ├── tsconfig.json
│ │ ├── public
│ │ │ ├── js
│ │ │ │ ├── build
│ │ │ │ │ ├── auth.bundle.js
webpack.config.js
这个配置可能可以进一步简化。
对于每个包,应该创建一个指向主文件的新配置。请记住重命名输出包。
每页不应包含超过一个捆绑包。如果您需要(例如)auth.bundle.js
和search.bundle.js
在主页上,您可能应该创建一个home.component.ts
使用auth.component.ts
and search.component.ts
并在中创建一个配置webpack.config.js
来创建home.bundle.js
const path = require('path');
//Common configurations
let config = {
module: {
loaders: [
{ test: /\.ts$/, loader: 'awesome-typescript-loader' }
]
},
resolve: {
extensions: ['.ts']
}
};
//Copy and paste this for as many different bundles
//as required
let authConfig = Object.assign({}, config, {
entry: path.join(__dirname, 'components/auth','auth.component.ts'),
output: {
path: path.join(__dirname, '../../public/js/build'),
filename: 'auth.bundle.js',
library: 'XApp'
}
});
//Add each config here.
module.exports = [
authConfig
];
tsconfig.json
{
"compileOnSave": true,
"compilerOptions": {
"sourceMap": true,
"moduleResolution": "node",
"lib": ["dom", "es2015", "es2016"]
},
"exclude": [
"node_modules"
]
}
Run
Type webpack
在目录中webpack.config.js
居住。
将 JS 添加到 Twig 文件中
在您的模板之一中的某处。
{% block javascripts %}
{# More stuff here #}
{% javascripts
'@XBundle/Resources/public/js/build/auth.bundle.js'
%}
{# More stuff here #}
{% endjavascripts %}
{% endblock %}
并为任何新运行以下命令bundles.js
首次在 symfony 项目的根目录中创建:
php bin/console assets:install
php bin/console assetic:dump