Sails.js 和 React.js, 怎样做才正确?
Sails.js with React.js, how to do it correctly?
我想在我的 Sails.js 应用程序中集成 React.js + browserify。
为此我使用了 grunt-plugin grunt-react.
我创建了一个文件/tasks/config/browserify.js
module.exports = function(grunt) {
grunt.config.set('browserify', {
//dev: {
options: {
transform: [ require('grunt-react').browserify ],
extension: 'jsx'
},
app: {
src: 'assets/jsx/app.jsx',
dest: '.tmp/public/js/app.js'
}
//}
});
grunt.loadNpmTasks('grunt-browserify');
};
然后我在compileAssets.js
和syncAssets.js
中添加了一行:
// compileAssets.js
module.exports = function (grunt) {
grunt.registerTask('compileAssets', [
'clean:dev',
'stylus:dev',
'browserify', // <<< this added
'copy:dev'
]);
};
和
// syncAssets.js
module.exports = function (grunt) {
grunt.registerTask('syncAssets', [
'stylus:dev',
'browserify', // <<< this added
'sync:dev'
]);
};
然后我修改了copy.js
中的一行。
// copy.js
module.exports = function(grunt) {
grunt.config.set('copy', {
dev: {
files: [{
expand: true,
cwd: './assets',
src: ['**/*.!(styl|jsx)'], /// <<< this modified
dest: '.tmp/public'
}]
},
build: {
files: [{
expand: true,
cwd: '.tmp/public',
src: ['**/*'],
dest: 'www'
}]
}
});
grunt.loadNpmTasks('grunt-contrib-copy');
};
成功了!
但是我觉得我做的不太对
如果我像这样在 /tasks/config/browserify.js
中取消注释行 dev: {
和 }
:
module.exports = function(grunt) {
grunt.config.set('browserify', {
dev: { /// <<< this uncommented
options: {
transform: [ require('grunt-react').browserify ],
extension: 'jsx'
},
app: {
src: 'assets/jsx/app.jsx',
dest: '.tmp/public/js/app.js'
}
} /// <<< this uncommented
});
grunt.loadNpmTasks('grunt-browserify');
};
如果我在 compileAssets.js
和 syncAssets.js
中进行更改:
// compileAssets.js
module.exports = function (grunt) {
grunt.registerTask('compileAssets', [
'clean:dev',
'stylus:dev',
'browserify:dev', // <<< this added :dev
'copy:dev'
]);
};
和
// syncAssets.js
module.exports = function (grunt) {
grunt.registerTask('syncAssets', [
'stylus:dev',
'browserify:dev', // <<< this added :dev
'sync:dev'
]);
};
不行!
值得担心吗?
为什么当我在 compileAssets.js
和 syncAssets.js
文件中添加 browserify: dev
时它不起作用?
我找到了正确的解决方案。
更新:现在,我们可以使用https://github.com/erikschlegel/sails-generate-reactjs
我创建了 grunt-reactify 以允许您拥有 JSX 文件的捆绑文件,以便更轻松地使用模块化 React 组件。
您所要做的就是指定父目标文件夹和源文件:
grunt.initConfig({
reactify: {
'tmp': 'test/**/*.jsx'
},
})
在 Sails 中,转到 tasks/config 文件夹并创建一个新文件 "reactify.js" 并插入以下代码:
module.exports = function (grunt) {
grunt.config.set('reactify', {
'[Destination folder]': '[folder containing React Components]/**/*.jsx'
});
grunt.loadNpmTasks('grunt-reactify');
};
然后转到文件tasks/register/compileAssets.js 并添加reactify:
module.exports = function (grunt) {
grunt.registerTask('compileAssets', [
'clean:dev',
'jst:dev',
'less:dev',
'copy:dev',
'coffee:dev',
'reactify'
]);
};
就是这样!
我想在我的 Sails.js 应用程序中集成 React.js + browserify。
为此我使用了 grunt-plugin grunt-react.
我创建了一个文件/tasks/config/browserify.js
module.exports = function(grunt) {
grunt.config.set('browserify', {
//dev: {
options: {
transform: [ require('grunt-react').browserify ],
extension: 'jsx'
},
app: {
src: 'assets/jsx/app.jsx',
dest: '.tmp/public/js/app.js'
}
//}
});
grunt.loadNpmTasks('grunt-browserify');
};
然后我在compileAssets.js
和syncAssets.js
中添加了一行:
// compileAssets.js
module.exports = function (grunt) {
grunt.registerTask('compileAssets', [
'clean:dev',
'stylus:dev',
'browserify', // <<< this added
'copy:dev'
]);
};
和
// syncAssets.js
module.exports = function (grunt) {
grunt.registerTask('syncAssets', [
'stylus:dev',
'browserify', // <<< this added
'sync:dev'
]);
};
然后我修改了copy.js
中的一行。
// copy.js
module.exports = function(grunt) {
grunt.config.set('copy', {
dev: {
files: [{
expand: true,
cwd: './assets',
src: ['**/*.!(styl|jsx)'], /// <<< this modified
dest: '.tmp/public'
}]
},
build: {
files: [{
expand: true,
cwd: '.tmp/public',
src: ['**/*'],
dest: 'www'
}]
}
});
grunt.loadNpmTasks('grunt-contrib-copy');
};
成功了!
但是我觉得我做的不太对
如果我像这样在 /tasks/config/browserify.js
中取消注释行 dev: {
和 }
:
module.exports = function(grunt) {
grunt.config.set('browserify', {
dev: { /// <<< this uncommented
options: {
transform: [ require('grunt-react').browserify ],
extension: 'jsx'
},
app: {
src: 'assets/jsx/app.jsx',
dest: '.tmp/public/js/app.js'
}
} /// <<< this uncommented
});
grunt.loadNpmTasks('grunt-browserify');
};
如果我在 compileAssets.js
和 syncAssets.js
中进行更改:
// compileAssets.js
module.exports = function (grunt) {
grunt.registerTask('compileAssets', [
'clean:dev',
'stylus:dev',
'browserify:dev', // <<< this added :dev
'copy:dev'
]);
};
和
// syncAssets.js
module.exports = function (grunt) {
grunt.registerTask('syncAssets', [
'stylus:dev',
'browserify:dev', // <<< this added :dev
'sync:dev'
]);
};
不行!
值得担心吗?
为什么当我在 compileAssets.js
和 syncAssets.js
文件中添加 browserify: dev
时它不起作用?
我找到了正确的解决方案。
更新:现在,我们可以使用https://github.com/erikschlegel/sails-generate-reactjs
我创建了 grunt-reactify 以允许您拥有 JSX 文件的捆绑文件,以便更轻松地使用模块化 React 组件。 您所要做的就是指定父目标文件夹和源文件:
grunt.initConfig({
reactify: {
'tmp': 'test/**/*.jsx'
},
})
在 Sails 中,转到 tasks/config 文件夹并创建一个新文件 "reactify.js" 并插入以下代码:
module.exports = function (grunt) {
grunt.config.set('reactify', {
'[Destination folder]': '[folder containing React Components]/**/*.jsx'
});
grunt.loadNpmTasks('grunt-reactify');
};
然后转到文件tasks/register/compileAssets.js 并添加reactify:
module.exports = function (grunt) {
grunt.registerTask('compileAssets', [
'clean:dev',
'jst:dev',
'less:dev',
'copy:dev',
'coffee:dev',
'reactify'
]);
};
就是这样!